Должен ли я удалить использованный указатель, который я создал в функции? - PullRequest
0 голосов
/ 25 марта 2019

Да, я возился с одиночными связанными списками в C ++ и натолкнулся на эту путаницу. Я создал указатель в функции insert, и я не был уверен, будет ли он удален после этого.

Я думал, что смогу удалить его, если просто нажму несколько блоков примерно так: temp = temp->next->next Но это выглядит глупо.

void List::insert(int data){
    Node* newNode = new Node(data);
    newNode->next = nullptr;
    if(isEmpty())
    {
        head = newNode;
        std::cout << "empty";
    }else{
        Node* temp = head;
        while(temp->next!=nullptr){
            temp = temp->next;
        }
        temp->next = newNode;
        delete temp; //If i remove this the program works ok and it is reasonable,since i delete the ref
    }
}

Я почти уверен, что должен удалить узел, но я не уверен на 100%, что должен. Любые подсказки?

1 Ответ

0 голосов
/ 25 марта 2019

Вот подсказка: рассмотрим List::size().Сколько узлов до вставки, сколько после вставки?new Node создает узел, а delete temp удаляет узел.

Теперь, если вы все сделаете правильно, у вас все еще могут быть ошибки, когда вы удаляете неправильный узел, но по крайней мере insert будет правильным.

...