我曾在某处读到过,当你使用定位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
通常会调用析构函数,然后释放内存。那为什么不直接使用delete
呢?delete pMyClass; //what's wrong with that?
在第一种情况下,我们在调用析构函数后被迫将 pMyClass
设置为 nullptr
,就像这样:
pMyClass->~MyClass();
pMyClass = nullptr; // is that correct?
但是析构函数并没有释放内存,对吗? 那这算不算内存泄漏呢?
我有些困惑,你能解释一下吗?