【问题标题】:In a linked list, in what order are nodes removed by the destructor? [duplicate]在链表中,析构函数以什么顺序删除节点? [复制]
【发布时间】:2017-03-19 10:50:43
【问题描述】:

在链表中,析构函数按什么顺序删除节点?

是先到后还是先到后?

【问题讨论】:

    标签: c++ linked-list destructor


    【解决方案1】:

    任何一种顺序都是可能的——唯一可以确定的方法是检查您正在使用的具体实现。

    一般来说,对于单链表,我希望从前到后排序,因为它更容易实现且效率更高:

    LinkedList::~LinkedList()
    {
        Node *node = mHead;
        while (node) {
            Node *next = node->mNext;
            delete node;
            node = next;
        }
    }
    

    相对于从后到前的排序,单链表通常需要某种递归:

    void deleteList(Node *node)
    {
        if (node == 0) {
           return;
        }
        deleteList(node->mNext);
        delete node;
        return;
    }
    LinkedList::~LinkedList()
    {
       deleteList(mHead);
    }
    

    再说一遍——确定的唯一方法是查看您的链表实现。

    【讨论】:

      【解决方案2】:

      我想这是因为编译器会读取代码。从上到下,析构函数从第一个到最后一个删除。你甚至可以使用 { }|以确保在通常发生之前重新分配内存。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-27
        • 1970-01-01
        • 2020-04-17
        • 2013-10-14
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多