我不太精通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_加了下划线,并写道:“这是泄漏!”在它旁边。我一直在想delete begin_怎么可能泄露信息,但我还是不明白。有没有人能帮我一下?
发布于 2012-06-18 03:07:07
您必须遍历列表中的每个节点并将其删除。按住一个单独的指针指向下一个,删除当前,然后向前移动并继续删除,直到下一个指针为null。
~LinkedList()
{
Node * current = begin_;
Node * aNext = begin_->next;
while (null != aNext){
delete(current);
current = aNext;
aNext = current->next;
}
}就像这样。不知道你从哪里弄到begin_的,但是......
发布于 2012-06-18 03:07:32
在Node的析构函数中,它应该向next发送delete命令,以便释放列表中的所有节点。
发布于 2012-06-18 03:13:29
我想你会更好地理解它:
~LinkedList()
{
reset();
while(!end()) remove();
}https://stackoverflow.com/questions/11074023
复制相似问题