Для ListElement задайте значение 0 и ссылку 0 (NULL).
Вам не нужно сбрасывать какие-либо значения в деструкторе, так как значения не будут существовать после выполнения деструктора.
Главное, в чем вы должны быть уверены, это то, что все элементы, выделенные в куче (т. Е. С использованием new
), удаляются с помощью delete
(или delete []
в случае массивов).
Для LinkedList просмотрите элементы и вызовите ListElementDestructor для всех из них.
Для объекта, размещенного в стеке, он автоматически вызывается, когда объект выходит из области видимости.
Для динамически размещаемого объекта (т. Е. Созданного с использованием new
) деструктор вызывается, когда
он удаляется с помощью delete
. Другими словами, вам не нужно вызывать никаких деструкторов, поскольку они вызываются автоматически, если вы правильно очищаете свои объекты.
Учитывая (я предполагаю), что вы выделяете новые ListElements в куче в классе LinkedList, вы должны убедиться, что в деструкторе LinkedList каждый ListElement удален в деструкторе, пройдя по списку и вызвав delete для каждого ListElement ( конечно же, после того, как вы получили из него адрес следующего элемента списка). Примерно так:
ListElement* current = list.start;
while( current ){
ListElement* next = current->next;
delete current;
current = next;
}
Нет ничего в классе ListElement, который нуждается в очистке, так как, хотя у него есть указатель на следующий элемент, удаление, вероятно, должно обрабатываться в классе LinkedList, что означает, что ему не нужен деструктор.
Не обязательно писать деструктор для каждого класса, так как компилятор автоматически сгенерирует для вас пустой.
Как я уже говорил в комментариях, вам не следует использовать стек для обращения к связанному списку. Вы должны просто поменять местами указатели.
Быстрый пример того, что вам нужно.
ListElement* previous = 0;
ListElement* current = list.start;
while( current->next ){
//copy the address of current item on the list
ListElement* next = current->next;
//point the current list item to the previous list item
current->next = previous;
//set the current list item to the next list item
current = next;
//and the previous list item to the current one
previous = current;
}
//set the start of the list to what was the end
list.start = current;