2012-05-13 13 views
12

delete ptrはデストラクタを呼び出すことで、deleteoperator delete(ptr)となりますか?つまり、delete ptrは最初にデストラクタをptr、次に割り当てられたメモリを解放するためにoperator delete(ptr)を呼び出しますか?次に、delete ptrは技術的に次のようになります。削除対オペレータの削除(およびvoidポインタ)

T * ptr = new T; 

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

+3

はい、唯一の違いは、あなたが 'operator delete'をオーバーロードできるという事実の他にあります。 –

答えて

8

delete ptroperator deleteのためにオーバーロードの解決を行いますので、はい、グローバル::operator delete

しかし、そうでない場合は呼び出すことはできません。 deleteオペレータは、関連するデストラクタがあればそれを呼び出し、operator deleteを呼び出します。

関連する問題