2010-02-11 35 views
9

可能顯示的文件類型:
Why ‘this’ is a pointer and not a reference?
SAFE Pointer to a pointer (well reference to a reference) in C#爲什麼 '這個' 關鍵字不是引用在C++

在C++中的this關鍵字都有一個指針指向該對象我目前上午。

我的問題是爲什麼this類型的指針類型而不是引用類型。 有沒有什麼條件下this關鍵字是NULL

我的直接想法是在一個靜態函數中,但Visual C++至少足夠聰明地發現它並報告static member functions do not have 'this' pointers。這是在標準?

+2

Dupe http://stackoverflow.com/questions/645994/why-this-is-a-pointer-and-not-a-reference – 2010-02-11 18:30:04

+2

不完全重複!另一個問題沒有解決這裏提出的次要問題,比如「可以'這個'永遠是空的嗎?」。當這個問題結束時,我正在回答這個問題。 – 2010-02-11 18:58:22

+0

是「有什麼條件下''this''關鍵字將* NULL *?」在別處回答? – 2010-02-11 19:59:10

回答

16

見Stroustrup的Why is this not a reference

因爲 「這個」 引入C++(真的與類的C)加入引用之前。另外,我選擇「this」來遵循Simula的用法,而不是(後來的)Smalltalk使用「self」。

+2

爲什麼downvote? ,這來自BS(顯然) – Tom 2010-02-11 18:35:08

+0

也許有人認爲我複製了重複問題的答案(事實並非如此,我剛剛在本文中發現它)。 – Dario 2010-02-11 19:03:05

0

(可能不是一個完整的答案) 總是有這種情況,當一個對象需要與「危險」

delete this; 

所以,可能必須是一個指針刪除自身。

M.

+7

如果它是一個參考,你可以'刪除&this;'。 – 2010-02-11 18:33:20

+2

'delete&this'甚至可能比'delete'更有優勢,因爲額外的'&'可能會讓你問自己是否允許刪除當前對象,即。如果它是在堆上動態分配的。在這方面,「刪除這個」看起來更不引人注目,IMO。 – stakx 2010-02-11 18:34:47

3

因爲直到後來纔將引用添加到C++中。到那時改變它爲時已晚。

相關問題