2010-02-11 20 views
9

Possibili duplicati:
Why ‘this’ is a pointer and not a reference?
SAFE Pointer to a pointer (well reference to a reference) in C#Perché il 'questo' parola chiave non un tipo di riferimento in C++

Il this parola chiave in C++ ottiene un puntatore all'oggetto Attualmente sono.

La mia domanda è perché il tipo di this è un tipo di puntatore e non un tipo di riferimento. Esistono condizioni in base alle quali la parola chiave this è NULL?

Il mio pensiero immediato sarebbe in una funzione statica, ma Visual C++ è almeno abbastanza intelligente da individuarlo e segnalare static member functions do not have 'this' pointers. Questo è nello standard?

+2

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

+2

Non duplicato esatto! L'altra domanda non affronta le domande secondarie qui poste, come "può 'questo' essere mai nullo?". Ero nel mezzo di rispondere a questa domanda quando questa domanda era chiusa. –

+0

"Esistono condizioni in cui la parola chiave" this "dovrebbe essere * NULL *?" risposto altrove? –

risposta

16

See Stroustrup Why is this not a reference

Perché "questo" è stato introdotto in C++ (realmente in C con le classi) prima sono stati aggiunti riferimenti. Inoltre, ho scelto "questo" per seguire l'uso di Simula, piuttosto che l'uso (successivo) di Smalltalk di "sé".

+2

Perché il downvote? , questo viene da BS (apparentemente) – Tom

+0

Forse qualcuno pensava che io abbia copiato la risposta dalla domanda duplicata (che non è il caso, l'ho appena scoperto in questo secondo). – Dario

0

(probabilmente non è una risposta completa) c'è sempre la situazione quando un oggetto ha bisogno di cancellare se stesso con la "pericolosa"

delete this; 

Quindi è probabilmente dovuto essere un puntatore.

M.

+7

Se si tratta di un riferimento, è possibile "eliminare &this;". –

+2

'delete & this' potrebbe anche avere un vantaggio su' delete this' in quanto '' potrebbe richiedere a te stesso se è effettivamente consentito eliminare l'oggetto corrente, ad es. se è stato assegnato in modo dinamico sull'heap. 'Elimina questo' sembra molto più discreto sotto questo aspetto, IMO. – stakx

3

perché i riferimenti non sono stati aggiunti al C++ fino a tardi. A quel punto era troppo tardi per cambiarlo.

Problemi correlati