2010-02-11 9 views
9

posibles duplicados:
Why ‘this’ is a pointer and not a reference?
SAFE Pointer to a pointer (well reference to a reference) in C#¿Por qué es el 'esto' no de palabras clave de un tipo de referencia en C++

La palabra clave this en C++ consigue un puntero al objeto que actualmente a.m.

Mi pregunta es por qué es el tipo de this un tipo de puntero y no un tipo de referencia. ¿Hay alguna condición bajo la cual la palabra clave this sería NULL?

Mi pensamiento inmediato sería en una función estática, pero Visual C++ al menos es lo suficientemente inteligente como para detectar esto e informar static member functions do not have 'this' pointers. ¿Esto está en el estándar?

+2

Dupe http://stackoverflow.com/questions/645994/why-this-is-a-pointer-and-not-a-reference –

+2

No es exacta y duplicar! La otra pregunta no aborda las preguntas secundarias planteadas aquí, como "¿puede' esto 'ser nulo alguna vez? ". Estaba en medio de responder eso cuando esta pregunta fue cerrada. –

+0

Es "¿Hay alguna condición bajo la cual la palabra clave' this' sería * NULL *? " respondió en otro lugar? –

Respuesta

16

de BS Ver Why is this not a reference

Debido a que "este" se introdujo en C++ (realmente en C con Clases) antes de añadir referencias. Además, elegí "esto" para seguir el uso de Simula, en lugar del uso (posterior) de Smalltalk del "yo".

+2

¿Por qué el voto a favor? , esto viene de BS (al parecer) – Tom

+0

Tal vez alguien pensó que copié la respuesta de la pregunta duplicada (que no es el caso, acabo de descubrirlo en este segundo). – Dario

0

(probablemente no es una respuesta completa) siempre existe la situación en la que un objeto tiene que borrarse a sí mismo con el "peligroso"

delete this; 

por lo que probablemente tiene que ser un puntero.

M.

+7

Si fuera una referencia, podría 'eliminar &this;'. –

+2

'delete & this' podría incluso tener una ventaja sobre' delete this' ya que el 'y' adicional podría hacer que se pregunte si realmente puede eliminar el objeto actual, es decir. si se asignó dinámicamente en el montón. 'delete this' se ve mucho más discreto a este respecto, IMO. – stakx

3

Porque las referencias no se agregaron a C++ hasta más adelante. Para entonces era demasiado tarde para cambiarlo.

Cuestiones relacionadas