【发布时间】:2017-01-11 00:09:22
【问题描述】:
所以我已经有一段时间没有进行任何 c++ 编码了,我只是想知道应该在析构函数中删除基本链表中的哪些变量,不幸的是我目前无法查阅我的 c++ 手册关于此事.链表类如下所示:
#include <string>
#include <vector>
class Node
{
Node *next;
string sName;
vector<char> cvStuff;
Node(string _s, int _i)
{
next = nullptr;
sName = _s;
for (int i = 0; i < _i; i++)
{
cvStuff.insert(cvStuff.end(), '_');
}
}
~Node()
{
//since sName is assigned during runtime do I delete?
//same for cvStuff?
}
};
我也很好奇,如果在我调用的析构函数中
delete next;
是否会转到链表的下一个节点并删除该节点,从而从该点递归删除整个列表?另外,如果是这种情况并且我出于某种原因选择实现它,我是否必须在删除它之前检查 next 是否为 nullptr 或者它不会产生影响?
谢谢。
【问题讨论】:
-
这试图同时成为 ListNode 和 List。谁拥有这份名单?如果它们相同,您是否共享列表的尾部?您打算删除元素,还是只删除整个列表?
-
@lorro,是的,这在技术上是一个节点类,并已进行了相应的调整。定义共享尾部?另外,删除整个列表。
-
在这种情况下,不要删除!否则,您将无法编写会擦除列表中任何给定元素的快速擦除。共享前向链表的尾部意味着,如果您知道两个列表的背面应该具有相同的元素,则您共享节点。对于一旦构建并变为 const 的列表非常有用。
标签: c++ vector destructor