gpt4 book ai didi

c++ - 如何销毁包含自引用指针的对象?

转载 作者:行者123 更新时间:2023-11-27 23:54:30 25 4
gpt4 key购买 nike

我有一个树节点结构,它被简单地定义为:

typedef struct TreeNode {
int data;
TreeNode *left;
TreeNode *right;
TreeNode *parent;

TreeNode(int);
~TreeNode();
} TreeNode;

为了在销毁时释放由 leftrightparent 对象指向的内存(假设不为空),我创建了一个析构函数如下:

TreeNode::~TreeNode() {
delete left;
delete right;
delete parent;
}

但是,这样做会导致控件无限递归地删除 TreeNode 对象,因为析构函数中的那些 delete 语句会调用同一结构的析构函数。


问题:

  • 释放自引用指针的正确方法是什么,特别是在析构函数中?

最佳答案

正确的方法是不使用拥有原始指针,而是为 child 使用 std::unique_ptr

如果您还去掉了多余的 typedef,则该结构如下所示:

struct TreeNode {
int data;
std::unique_ptr<TreeNode> left;
std::unique_ptr<TreeNode> right;
TreeNode *parent{nullptr};

TreeNode() = default;
};

现在您不需要做任何事情,编译器将为您生成正确的解构函数。

关于c++ - 如何销毁包含自引用指针的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43663044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com