删除运算符

时间:2018-06-23 13:51:58

标签: c++ linked-list delete-operator

void createnode(int data)
{
    node *temp=new node;
    temp->data=data;
    if(head==null)
    {
        head=temp;
        tail=temp;
        temp=null;
    }
    else
    {
        tail->next=temp;
        temp=null;
    }
}

我现在应该删除temp吗? 我将使用另一个函数删除每个节点。够了吗?

3 个答案:

答案 0 :(得分:0)

首先,temp为null,因此将其删除将是空操作。

如果您在此功能中询问是否应删除new node的结果,答案是“不,您不应该”。如果这样做,该列表将保留悬空的指针。正确的方法是在从列表中删除节点时,在删除列表本身时删除节点等。

答案 1 :(得分:0)

您需要阅读一些有关指针和内存的基本知识。

delete用于从内存中删除某些内容。在这种情况下,这就是用于存储节点内容的堆变量。显然,这是在删除节点时准确完成的。

temp设置为nullptr之后,它不再代表(/指向)任何内存。调用delete毫无意义。 (从技术上讲,这是无害的,但是在代码中包含无用的行仍然不好。)

我建议您阅读一下堆栈和堆是什么,为什么堆需要新的堆并在堆不需要时删除它们。这可能会为您清除一切。

答案 2 :(得分:0)

  

我现在应该删除temp吗?我将使用另一个功能   删除每个节点。

否。

正如您的函数名所建议的那样,它是createNode()(读作 create 节点)。

此功能的重点是通过创建和链接节点来构造列表
不要删除它们。

仅在破坏列表或要从列表中删除(或删除)节点时删除。

注意

temp重命名为“ newNode” ,并且不要将其设置为null,以免悬空指针。