gpt4 book ai didi

c++ - 链表泄漏?

转载 作者:行者123 更新时间:2023-11-30 04:27:16 26 4
gpt4 key购买 nike

我不太精通C++,但我有设计和实现链表的任务。这是我提交的:

template <typename T>
struct Node
{
Node() : next(nullptr) {}
Node(T const & val) : next(nullptr), value(val) {}

Node * next;
T value;
};

template <typename T>
class LinkedList
{
public:
LinkedList()
{
begin_ = new Node<T>;
current_ = begin_;
}
~LinkedList()
{
delete begin_;
}

void insert(T const & value)
{
Node<T> * node = new Node<T>(value);
node->next = current_->next;
current_->next = node;
current_ = current_->next;
}

void remove()
{
Node<T> * tmp = current_->next;
if(!end())
{
current_->next = current_->next->next;
}
delete tmp;
}

bool end() const
{
return current_->next == nullptr;
}

void reset()
{
current_ = begin_;
}

void advance()
{
if(!end())
{
current_ = current_->next;
}
}

T get() const
{
return current_->next->value;
}

private:
Node<T> * begin_;
Node<T> * current_;
};

我通过了作业,但我的老师在析构函数~LinkedList() 中的delete begin_ 下划线并写下“This leaks!”在它的旁边。我一直在想delete begin_ 怎么可能泄露,但我还是不明白。有人可以帮我解决这个问题吗?

最佳答案

您必须遍历列表中的每个节点并删除。持有一个单独的指向next的指针,删除current,然后向前移动并继续删除,直到next指针为空。

~LinkedList()
{
Node * current = begin_;
Node * aNext = begin_->next;

while (null != aNext){
delete(current);
current = aNext;
aNext = current->next;
}
}

是这样的。不知道你从哪里开始,但是........

关于c++ - 链表泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11074023/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com