新手问题。假设我有一个带有
的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而不是自己编写,但是正确 现在我只是想教育自己指点。
答案 0 :(得分:0)
由于您没有提供自定义析构函数,编译器将为您生成默认值,默认情况下会在其元素上调用析构函数。
现在,您的问题的答案实际上取决于您的x
是什么:)如果它是一个具有析构函数的对象(如std::string
) - 它将被正确销毁。但如果它是一个“裸指针”(如int *
) - 它将不被破坏并导致内存泄漏。
NB 你在堆栈上创建x
所以我真的非常希望X
提供正确的复制语义,否则你可能会得到一个无效的对象存储在你的节点中!