首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链表泄露?

链表泄露?
EN

Stack Overflow用户
提问于 2012-06-18 03:04:50
回答 3查看 140关注 0票数 1

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

代码语言:javascript
复制
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_怎么可能泄露信息,但我还是不明白。有没有人能帮我一下?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-18 03:07:07

您必须遍历列表中的每个节点并将其删除。按住一个单独的指针指向下一个,删除当前,然后向前移动并继续删除,直到下一个指针为null。

代码语言:javascript
复制
~LinkedList()
{
    Node * current = begin_;
    Node * aNext = begin_->next;

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

就像这样。不知道你从哪里弄到begin_的,但是......

票数 2
EN

Stack Overflow用户

发布于 2012-06-18 03:07:32

在Node的析构函数中,它应该向next发送delete命令,以便释放列表中的所有节点。

票数 0
EN

Stack Overflow用户

发布于 2012-06-18 03:13:29

我想你会更好地理解它:

代码语言:javascript
复制
~LinkedList()
{
  reset();
  while(!end()) remove();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11074023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档