Как правильно освободить память, выделенную при размещении new?

Я читал кое-что, что когда вы используете размещение 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?

в первом случае. В этом случае мы вынуждены установить для pMyClass значение nullptr после того, как вызываем деструктор следующим образом:

pMyClass->~MyClass();
pMyClass = nullptr;  // is that correct?

НО деструктор НЕ освободил память, верно? Может быть, это утечка памяти?

Я запуталась, можете ли вы это объяснить?

23
задан Keith Thompson 18 January 2012 в 23:20
поделиться