在c ++中覆盖基类和派生类的delete运算符

时间:2015-02-19 20:23:18

标签: c++ class oop

下面是我的示例代码,其中我覆盖了派生类的删除运算符。

我的目标是我想在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
}

0 个答案:

没有答案