2012-05-13 11 views
12

Unterscheidet sich delete ptr von nur in diesem, dass delete Anrufe ptr Destructor? Oder in anderen Worten, ruft delete ptr zuerst einen Destruktor von ptr und dann operator delete(ptr), um zugewiesenen Speicher freizugeben? Dann ist delete ptr technisch äquivalent zu den folgenden:Löschen vs Operator löschen (und void Zeiger)

T * ptr = new T; 

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

?

+3

Ja, das ist der einzige Unterschied, abgesehen davon, dass Sie 'operator delete' überladen können. –

Antwort

8

delete ptr tun Überladungsauflösung für operator delete, so kann es die globale ::operator delete

Aber sonst nicht nennen, ja. Der Operator delete ruft den entsprechenden Destruktor (falls vorhanden) auf und ruft dann operator delete auf.

Verwandte Themen