2010-02-11 74 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++中。到那时改变它为时已晚。