Деконструкция связанного списка - PullRequest
1 голос
/ 28 февраля 2012

Я работаю над заданием, которое требует от меня переопределения всех функций связанного списка.У меня возникли проблемы с пониманием того, что делает деконструктор или какой код для него будет.Я написал код, который будет деконструировать список, но я не думаю, что это правильно (см. Ниже).У меня также сложилось впечатление, что мне нужно вызывать деконструктор во многих функциях LinkedList.Может кто-нибудь объяснить мне это и дать представление о том, как будет выглядеть код деконструктора?

 ~list()
{
   for(int i=0; i<length; i++)
   {
       pop_front();
   }
   delete head;
}

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

Если ваш код не виден, точное решение не может быть предложено.Вам необходимо освободить все динамически размещенные узлы связанного списка, если вы используете свой рукописный связанный список.Вы также можете использовать std::list.

" деструктор " не должен вызываться явно, однако он будет вызываться как часть вызова delete.Один из способов уничтожить конечный список ссылок 0 - это (пример псевдокода):

class node {
  int data;
  node *next;
public:
  ~node()
  {
    delete this->next;  // this will be chained until NULL is found
  }
};

class list {
  node *head;
  ...
public:
  ~list()
  {
    delete head;
  }
};

И затем вызвать

1 голос
/ 28 февраля 2012

У вас утечка памяти, так как вы не делаете delete всех узлов списка.Типичная реализация может быть такой:

For each node in the list
    delete node;

Clear the entire list;

Кроме того,

У меня также сложилось впечатление, что мне нужно вызывать деконструктор во многих функциях LinkedList

Нет, вам не следует явно вызывать деструктор из любой из ваших функций.Он вызывается автоматически, когда объект выходит из области видимости или когда кто-то делает delete из вашего списка.Это полностью зависит от кода, который использует ваш класс list.Однако обратите внимание, что вы можете удалить один узел из списка в таких функциях, как erase, но это не значит, что вам нужно вызывать деструктор списка.

...