Max*_*xVT 3 c++ destructor operator-overloading
我正在将一些旧的代码从C转移到C++.旧的代码使用类似对象的语义,并且在一个点上,从解放了现在未使用的内存,搭配分离物件破坏的东西之间发生的:
Object_Destructor(Object *me) { free(me->member1), free(me->member2) }
ObjectManager_FreeObject(ObjectManager *me, Object *obj) { free(obj) }
Run Code Online (Sandbox Code Playgroud)
在C++中使用标准的析构函数(~Object)以及随后的调用是否可以实现上述功能delete obj?或者,我担心,这样做会将析构函数调用两次?
在特定情况下,所述operator delete的Object被覆盖为好.我在其他地方读过的定义("当使用operator delete时,对象有一个析构函数,总是调用析构函数)在重写的运算符中是正确的吗?
本delete operator是用来释放内存,它不会改变的析构函数是否被调用或没有.首先调用析构函数,然后才delete operator用于解除内存释放.
换句话说,用C++的析构函数和删除运算符来实现你的目标是不可能的.
样品:
#include <iostream>
#include <new>
using namespace std;
struct foo {
~foo() { cout << "destructor\n"; }
void operator delete(void* p) {
cout << "operator delete (not explicitly calling destructor)\n";
free(p);
cout << "After delete\n";
}
};
int main()
{
void *pv = malloc(sizeof(foo));
foo* pf = new (pv) foo; // use placement new
delete pf;
}
Run Code Online (Sandbox Code Playgroud)
输出:
析构函数
operator delete(不显式调用析构函数)
删除后