2012-05-13 3 views
12

Est-ce que delete ptr diffèrent de operator delete(ptr) seulement dans ce, que delete appels ptr destructor? Ou en d'autres termes, est-ce que delete ptr commence par appeler un destructeur de ptr puis operator delete(ptr) pour libérer de la mémoire allouée? Est alors delete ptr techniquement équivalent à ce qui suit:Supprimer vs opérateur supprimer (et pointeur vide)

T * ptr = new T; 

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

?

+3

Oui, c'est la seule différence, outre le fait que vous pouvez surcharger 'operator delete'. –

Répondre

8

delete ptr fera la résolution de surcharge pour operator delete, donc il ne peut pas appeler le ::operator delete

mondiale Mais sinon, oui. L'opérateur delete appelle le destructeur concerné, le cas échéant, puis appelle operator delete.

Questions connexes