我不知道如何简化我的问题,但是说我有这个意思:

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/

10-11 22:55