内存泄漏删除链表节点

时间:2018-04-05 10:49:56

标签: c++11 linked-list

新手问题。假设我有一个带有

的C ++ 11链表实现
template <typename X> struct Node {
   X value;
   Node* next;

   Node(X x) {
      this->value = x;
      this->next = nullptr;
   }
};

以后在代码中我创建了一个指针变量

X x = something;
Node<X>* node = new Node(x);

但后来我做了

delete node;

执行此语句时,节点中存储的x是否被破坏?

你可能会告诉我应该使用std :: list而不是自己编写,但是正确 现在我只是想教育自己指点。

1 个答案:

答案 0 :(得分:0)

由于您没有提供自定义析构函数,编译器将为您生成默认值,默认情况下会在其元素上调用析构函数。

现在,您的问题的答案实际上取决于您的x是什么:)如果它是一个具有析构函数的对象(如std::string) - 它将被正确销毁。但如果它是一个“裸指针”(如int *) - 它将被破坏并导致内存泄漏。

NB 你在堆栈上创建x所以我真的非常希望X提供正确的复制语义,否则你可能会得到一个无效的对象存储在你的节点中!