gpt4 book ai didi

c++ - 如果引用应该保留,不会在析构函数中删除指针会导致内存泄漏吗?

转载 作者:太空宇宙 更新时间:2023-11-04 15:29:44 27 4
gpt4 key购买 nike

我不知道如何表达我的问题更简单,但我有这个:

class Curve;

class Node {
Curve *curve;
public:
Node(Curve *curve);
~Node();
}

class Curve {
LinkedList<Node> nodes;
public:
Curve(); ~Curve();
}

在析构函数~Node中不删除指向曲线的指针可以吗?即会不会造成内存泄漏?还是我应该删除它?如果我删除它,它会破坏曲线吗?

编辑:曲线最终会被删除。

编辑 2:实现。

假设我实现了下面的代码:

int main() {
Curve *curve = new Curve();
Node *node = new Node(curve);
delete node; delete curve;
return 0;
}

我是否仍需要在节点的析构函数中调用delete curve

最佳答案

正如其他答案中提到的,这是关于所有权的。在您的特定示例中,可以不删除 Node 类的析构函数中的 Curve* ,因为您在 main 函数中管理 Curve 实例的生命周期。在实际代码中,管理原始指针可能非常困难,并会导致严重的错误。由于您将问题标记为 C++,因此您应该使用标准库的智能指针并将 Curve* 替换为 std::shared_ptr。如果您改变主意并让 Node 单独负责管理 Curve 实例,最好使用 std::unique_ptr 而不是原始指针。

关于c++ - 如果引用应该保留,不会在析构函数中删除指针会导致内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57746365/

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