Удалить оператора

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 новый узел прямо сейчас? Я буду использовать другую функцию для удаления каждого узла. Этого будет достаточно?

c++,linked-list,delete-operator,

1

Ответов: 3


0

Прежде всего, tempэто nullptr, поэтому удаление его было бы не-op.

Если вы спрашиваете, следует ли удалять результат из createNode()этой функции, ответ «нет, вы не должны». Если вы это сделаете, список сохранит оборванные указатели. Правильный способ - удалить узел, когда он удаляется из списка, когда сам список удаляется и т. Д.


0

Вам нужно прочитать некоторые основные вещи о указателях и памяти.

deleteиспользуется для удаления чего-либо из памяти. В этом случае это переменная кучи, которая сохраняет содержимое вашего узла. Очевидно, что это нужно делать точно, когда узел удален.

После установки tempна temp, она не представляет (/ пункт) любую память больше. Вызов удаления на нем не имеет смысла. (Это технически безвредно, но бесполезные строки в вашем коде все еще не очень хорошие.)

Я рекомендую вам прочитать, что такое стек и куча, и почему куча нуждается в новом и удалении, в то время как в стеке нет. Это может прояснить ситуацию.


0

Должен ли я удалить temp прямо сейчас? Я буду использовать другую функцию для удаления каждого узла.

Нет.

Как предлагает ваше имя функции, оно null(читается как узел создания ).

Весь смысл этой функции состоит в том, чтобы создать свой список , создав и связав узлы;
НЕ удалять их.

Удаляйте только тогда, когда список разрушен или вы хотите удалить (или удалить ) узел из списка.

ПРИМЕЧАНИЕ .

Переименуйте tempв «newNode» и не устанавливайте его, чтобы nullне иметь оборванных указателей.

C ++, связанный список, удалить-оператор,
Похожие вопросы