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

C++ 正在销毁成员函数C+中的对象+;,c++,dynamic-memory-allocation,self-destruction,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; } }; 类型为Safe的类应该

如果我绝对确定
派生的
是动态分配的,那么这种行为安全吗?我不想使用析构函数,因为我设计中的一些派生类不应该破坏它们自己,而其他派生类则应该破坏它们自己,例如

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

class Derived : public Base{
  void sth(){}
  void destroy_me(){
    delete this;
  }
};
类型为
Safe
的类应该通过调用
delete
以“正确”的方式释放

编辑: 给我更多的信息,为什么我这样做。我有一个二叉树结构的类型

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

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

只有在您100%确定您不是的情况下,在
derived
的派生类中。在上下文中,您能否详细说明“我设计的某些派生类不应该破坏它们自己,而其他派生类应该破坏它们自己”背后的思想?如果您有一个指向
Base
的指针,并调用
object->destroy_me()
,则通过编辑,您如何知道是否还需要调用
delete
?因此,如果您有
Base*
,那么您不知道是应该使用
delete
还是使用
destroy\u me
来销毁它?对我来说,这听起来像是一个糟糕的设计。只有当你100%确定你实际上不是在
派生的
派生类中时,才有可能复制。对于上下文,你能详细说明“我设计中的某些派生类不应该破坏它们自己,而其他派生类则应该破坏它们自己”背后的思想吗,如果你有一个指向
Base
的指针,并且你调用
object->destroy_me()
,你怎么知道你是否还需要调用
delete
?所以如果你有一个
Base*
,你就不知道你应该用
delete
还是
destroy_me
来销毁它?对我来说这是个糟糕的设计。可能是重复的
class Node{
  private:
    Node* lhs;
    Node* rhs;
  public:
    Base* compute();   // recursive
};