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
的指针,我想保留该对象,因为它总是存储在另一个数据结构中我在程序结束时正确地解除了分配。