我不知道如何简化我的问题,但是说我有这个意思:
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/