我一直在阅读一下,当你使用placement 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();
Run Code Online (Sandbox Code Playgroud)
据我所知,运算符delete通常会调用析构函数然后释放内存,对吧?那么我们为什么不用delete呢?
delete pMyClass; //what's wrong with that?
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,我们被迫将pMyClass设置为nullptr在我们调用析构函数之后:
pMyClass->~MyClass();
pMyClass = nullptr; // is that correct?
Run Code Online (Sandbox Code Playgroud)
但是析构函数没有释放内存,对吧? 这会是内存泄漏吗?
我很困惑,你能解释一下吗?