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