プレースメント newを使用する場合は、デストラクタを手動で呼び出す必要があることを読んだことがあります。
次のコードを検討してください。
// Allocate memory ourself
char* pMemory = new char[ sizeof(MyClass)];
// Construct the object ourself
MyClass* pMyClass = new( pMemory ) MyClass();
// The destruction of object is our duty.
pMyClass->~MyClass();
私の知る限り、オペレーターdelete
は通常、デストラクタを呼び出してからメモリの割り当てを解除しますよね? delete
では、代わりに使用しないのはなぜですか?
delete pMyClass; //what's wrong with that?
nullptr
最初のケースでは、次のようにデストラクタを呼び出した後にpMyClass を強制的に設定します。
pMyClass->~MyClass();
pMyClass = nullptr; // is that correct?
しかし、デストラクタはメモリの割り当てを解除しませんでしたよね? それで、それはメモリリークでしょうか?
私は混乱しています、あなたはそれを説明できますか?