Я читал, что когда вы используете размещение 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 wrong with that?
в первом случае мы вынуждены установить pMyClass на nullptr
после вызова деструктора следующим образом:
pMyClass->~MyClass();
pMyClass = nullptr; // is that correct?
НО деструктор НЕ освободил память, не так ли? Так будет ли это утечкой памяти?
Я в замешательстве, вы можете объяснить это?