1
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,我想保留该对象,因为它将始终存储在另一个我在程序结束时正确释放的数据结构中。

4

0 回答 0