C++双链表,动态分配后是否应该删除节点?
C++ Double Linked List, should I delete the nodes after dynamically allocating them?
void addEnd(T data) {
if (head == NULL) {
Node<T> *temp = new Node<T>(data);
head = temp;
tail = temp;
temp = NULL;
delete temp;
++size;
} else {
Node<T> *temp = new Node<T>(data);
tail->LinkToNext(temp);
temp->LinkToPrev(tail);
tail = temp;
temp = NULL;
delete temp;
++size;
}
}
在上面的addEnd函数中,我用它在堆上分配新的节点后是否应该删除temp,因为它可能会导致内存泄漏或者没有关系。
你删除的不是变量,而是内存。在你上面的代码中 temp
是 NULL
这意味着删除它什么都不做,所以不要打扰。
一定不要删除addEnd
函数中新建的节点,因为后面会用到。当列表被丢弃时,节点应该被删除。 (也许在析构函数 and/or 中类似于 clear()
函数)。
另请注意,您代码中的 delete temp;
是无意义的(没有好处,没有坏处),因为在此之前 temp
设置为 NULL
并且定义了 delete NULL;
什么都不做。
变量 temp
本身通常分配在堆栈上,并在函数返回时自动删除,因此您无需显式删除它。
void addEnd(T data) {
if (head == NULL) {
Node<T> *temp = new Node<T>(data);
head = temp;
tail = temp;
temp = NULL;
delete temp;
++size;
} else {
Node<T> *temp = new Node<T>(data);
tail->LinkToNext(temp);
temp->LinkToPrev(tail);
tail = temp;
temp = NULL;
delete temp;
++size;
}
}
在上面的addEnd函数中,我用它在堆上分配新的节点后是否应该删除temp,因为它可能会导致内存泄漏或者没有关系。
你删除的不是变量,而是内存。在你上面的代码中 temp
是 NULL
这意味着删除它什么都不做,所以不要打扰。
一定不要删除addEnd
函数中新建的节点,因为后面会用到。当列表被丢弃时,节点应该被删除。 (也许在析构函数 and/or 中类似于 clear()
函数)。
另请注意,您代码中的 delete temp;
是无意义的(没有好处,没有坏处),因为在此之前 temp
设置为 NULL
并且定义了 delete NULL;
什么都不做。
变量 temp
本身通常分配在堆栈上,并在函数返回时自动删除,因此您无需显式删除它。