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
};