【发布时间】:2015-01-20 12:45:39
【问题描述】:
我为一个不能正常工作的双向链表编写了一个析构函数。有一个循环来删除这些值。控制线从那个循环中出来,但程序没有完成。我的意思是,主要没有结束。
没关系,我想通了。
【问题讨论】:
-
没有看到 main() 部分就很难说什么。
-
卡在哪一行?
标签: c++ linked-list destructor doubly-linked-list
我为一个不能正常工作的双向链表编写了一个析构函数。有一个循环来删除这些值。控制线从那个循环中出来,但程序没有完成。我的意思是,主要没有结束。
没关系,我想通了。
【问题讨论】:
标签: c++ linked-list destructor doubly-linked-list
首先:移动delete node; 行。
如果只存在 head 则会出错。
LinkedList::~LinkedList() {
ListItem* node = head;
ListItem* temp = NULL;
if (head != NULL && head->next == NULL) {
delete head;
} else {
while (node->next) {
temp = node;
node = node->next;
delete temp;
}
delete node;
}
}
或者删除 if 语句。
LinkedList::~LinkedList() {
ListItem* node = head;
ListItem* temp = NULL;
while (node->next) {
temp = node;
node = node->next;
delete temp;
}
delete node;
}
【讨论】:
您可以编写析构函数 cimpler。例如
LinkedList::~LinkedList()
{
for ( ListItem *node = head; node; )
{
ListItem *temp = node;
node = node->next;
delete temp;
}
head = nullptr;
}
或者
LinkedList::~LinkedList()
{
while ( head )
{
ListItem *temp = head;
head = head->next;
delete temp;
}
head = nullptr;
}
【讨论】: