下面是我的示例代码,其中我覆盖了派生类的删除运算符。
我的目标是我想在delete运算符中删除base和derived类的对象。基本上我想保留两个类的地址,直到删除操作符被调用。
现在我正在使用原子操作进行同步,基本上我的析构函数没有被调用,当我执行类的某些功能时。现在,我希望得到那个原子操作。所以,我将捕获对象地址并在delete操作符中保存,直到它安全。析构函数将被其他人调用。
那么,哪个是删除运算符,基类或派生类的正确位置?当我在两个类中都使用delete运算符时,只调用派生的delete运算符。
#include <iostream>
using namespace std;
class base
{
public:
int l;
base() {cout << " base const" << endl;}
~base() { cout << " base descr" << endl;}
};
class derived: public base
{
public:
int k;
derived() {cout << " derived const" << endl;}
~derived() { cout << " derived descr" << endl;}
static void operator delete (void *p) {
return delete[] static_cast<char*>(p);
}
};
int main () {
derived *p = new derived;
p->k = 7;
p->l = 8;
cout << p <<" " << p->k << " " <<p->l << endl;
delete p
}