[英]How to destruct object containing self-referential pointer?
我有一个树节点结构,其简单定义为:
typedef struct TreeNode {
int data;
TreeNode *left;
TreeNode *right;
TreeNode *parent;
TreeNode(int);
~TreeNode();
} TreeNode;
为了释放left
, right
和parent
对象在销毁时所指向的内存(假设不为null),我按如下方式构造了一个析构函数:
TreeNode::~TreeNode() {
delete left;
delete right;
delete parent;
}
但是,这样做会导致控件无限递归地删除TreeNode
对象,因为析构函数中的那些delete
语句将调用同一结构的析构函数。
题:
正确的方法是不使用拥有的原始指针,而对子代使用std::unique_ptr
。
如果您还摆脱了多余的typedef
,则该结构如下所示:
struct TreeNode {
int data;
std::unique_ptr<TreeNode> left;
std::unique_ptr<TreeNode> right;
TreeNode *parent{nullptr};
TreeNode() = default;
};
现在您无需执行任何操作,编译器将为您生成正确的解构函数。
如果您不调用父析构函数,它应该可以工作。 但是,如上所述,该节点下的整个树将被删除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.