2012-05-13 13 views
12

delete ptr differisce da operator delete(ptr) solo in questo, che delete chiama ptr distruttore? O in altre parole, delete ptr chiama prima un distruttore di ptr e quindi operator delete(ptr) per liberare memoria allocata? Quindi è delete ptr tecnicamente equivalente al seguente:Elimina vs operatore elimina (e puntatore void)

T * ptr = new T; 

//delete ptr equivalent: 
ptr->~T(); 
::operator delete(static_cast<void *>(ptr)); 

?

+3

Sì, questa è l'unica differenza, oltre al fatto che è possibile sovraccaricare l'operatore "delete". –

risposta

8

delete ptr farà risoluzione sovraccarico per operator delete, quindi non può chiamare il globale ::operator delete

Ma per il resto, sì. L'operatore delete chiama il relativo distruttore, se presente, e quindi chiama operator delete.