在成员函数C ++中销毁对象

时间:2016-03-23 21:44:25

标签: c++ dynamic-memory-allocation self-destruction

class Base{
  virtual void sth() =0;
  virtual void destroy_me(){}
};

class Derived : public Base{
  void sth(){}
  void destroy_me(){
    delete this;
  }
};

如果我绝对确定Derived是动态分配的,这是否安全?我不想使用析构函数,因为我的设计中的某些派生类不应该自毁,而其他类似于

class Safe : public Base{
  void sth(){};
  void destroy_me(){return;}
}

类型Safe的类应该通过调用delete以“正确”方式取消分配。

编辑: 提供更多信息,为什么我这样做。我有一个类型为

的二叉树结构
class Node{
  private:
    Node* lhs;
    Node* rhs;
  public:
    Base* compute();   // recursive
};

我的想法是我使用Derived进行一些临时计算,而Safe是存储在适当数据结构中的对象。如果compute()返回指向Derived的指针,我想删除它,如果它返回指向Safe的指针,我想保留该对象,因为它总是存储在另一个数据结构中我在程序结束时正确地解除了分配。

0 个答案:

没有答案