我正在使用算法,对释放指针有疑问,特别是删除链接列表的第一个元素,下面是方法:
template<typename T>
class LinkedList
{
{
T value;
Node *next;
Node(T value)
{
this->value = value;
this->next = nullptr;
}
Node(T value, Node *next)
{
this->value = value;
this->next = next;
}
~Node()
{
};
};
public:
Node *head;
Node *tail;
LinkedList()
{
this->head = this->tail = nullptr;
}
~LinkedList()
{
Node *curr = this->head;
while (curr != nullptr)
{
Node* next = curr->next;
delete curr;
curr = next;
}
}
void addFirst(T value)
{
Node *newNode = new Node(value);
if (!this->head)
{
this->head = this->tail = newNode;
return;
}
newNode->next = this->head;
this->head = newNode;
}
void removeFirst(){
if(!this->head) return;
Node* tmp = this->head->next;
delete this->head;
this->head = tmp;
}
};
我的问题是,由于tmp指向head的下一个节点,因此在释放head时,它会释放内存(head的值和对下一个节点的引用)。下一个节点会失效吗?有人能进一步解释我在删除这个->头部时到底发生了什么吗?
1条答案
按热度按时间ymdaylpp1#
AFAIK,删除
this->head
会删除指向下一个节点的指针,但不会删除下一个节点的实际内存。像你这样删除this->head
是可以的。