2012-05-13 5 views
12

¿Se diferencia delete ptr de solo en esto, que delete llama ptr destructor? O en otras palabras, ¿el delete ptr primero llama a un destructor de ptr y luego operator delete(ptr) a la memoria asignada libre? Entonces es delete ptr técnicamente equivalente a lo siguiente:Eliminar vs operador eliminar (y el puntero de anular)

T * ptr = new T; 

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

?

+3

Sí, esa es la única diferencia, además del hecho de que puede sobrecargar 'operator delete'. –

Respuesta

8

delete ptr hará resolución de sobrecarga para operator delete, por lo que puede no llamar al mundial ::operator delete

Pero por lo demás, sí. El operador delete llama al destructor relevante, si lo hay, y luego llama al operator delete.

Cuestiones relacionadas