【问题标题】:Destructor for a linked List链表的析构函数
【发布时间】:2013-03-18 08:35:49
【问题描述】:

我有一个linked_list,目前我的析构函数不能正常工作。不完全确定为什么。 有人可以解释一下如何解决这个问题吗?

class linked_list {
 private:

struct node
{
    // String in this node
    std::string data;

    // Pointer to next node
    struct node *next;
};

//First item in the list
struct node *first;

这是我的析构函数

linked_list::~linked_list(void)
{
while (first)
{
    delete first;
    first = first->next;
}
}

【问题讨论】:

    标签: c++ linked-list destructor


    【解决方案1】:

    问题出在这里:

    delete first;
    first = first->next;
    

    当您删除first,但随后尝试访问first->next。将first->next 缓存到node* 类型的临时变量中,然后执行delete first 来解决此问题:

    struct node* temp;
    while (first != NULL)
    {
        temp = first->next;
        delete first;
        first = temp;
    }
    

    【讨论】:

    • 所以只要翻转就可以了?
    • @user1665569 你还需要一个指向下一个元素的临时指针,否则当你删除first时它就永远丢失了
    【解决方案2】:

    改成

     linked_list::~linked_list(void)
    {
    struct node *next;
    while (first != NULL)
    {
        next = first->next;
        delete first;
        first = next;
    }
     }
    

    【讨论】:

      【解决方案3】:

      当您首先“删除”时,实际上是清除了其中的所有链接。现在,如果您尝试使用它访问其他节点,将不会产生所需的结果。

      首先,您必须使用其他指针指向该节点,以便您仍然有一些链接可以稍后访问。

      【讨论】:

        猜你喜欢
        • 2016-01-31
        • 2013-04-26
        • 2012-10-15
        • 2018-03-27
        • 2016-12-08
        • 2014-05-27
        • 2017-06-12
        • 1970-01-01
        相关资源
        最近更新 更多