Я читал кое-что, что когда вы используете размещение 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?
НО деструктор НЕ освободил память, верно? Может быть, это утечка памяти?
Я запуталась, можете ли вы это объяснить?