Я изучаю связанный список и использую динамическое выделение памяти, но я не понимаю, как написать деструктор, потому что есть методы, которые используют новый и выходящий за рамки метод деструктора. Кстати, Node — это в основном класс с двумя закрытыми членами, одним int и одним указателем на себя (Node).
List::List()
{
HeadNode = new Node();
HeadNode->SetNext(nullptr);
CurrentNode = nullptr;
LastCurrentNode = nullptr;
Size = 0;
}
void List::Add(int AddObject)
{
Node* NewNode = new Node();
NewNode->Set(AddObject);
if (CurrentNode != nullptr)
{
NewNode->SetNext(CurrentNode->GetNext());
CurrentNode->SetNext(NewNode);
LastCurrentNode = CurrentNode;
CurrentNode = NewNode;
}
else
{
NewNode->SetNext(nullptr);
HeadNode->SetNext(NewNode);
LastCurrentNode = HeadNode;
CurrentNode = NewNode;
}
Size++;
}
int List::Get()
{
if (CurrentNode != nullptr)
{
return CurrentNode->Get();
}
}
bool List::Next()
{
if (CurrentNode == nullptr)
{
return false;
}
LastCurrentNode = CurrentNode;
CurrentNode = CurrentNode->GetNext();
if ((CurrentNode == nullptr) || (Size = 0))
{
return false;
}
else
{
return true;
}
}
void List::Remove()
{
if (CurrentNode != nullptr && CurrentNode != HeadNode)
{
LastCurrentNode->SetNext(CurrentNode->GetNext());
delete CurrentNode;
CurrentNode = LastCurrentNode->GetNext();
Size--;
}
}
Деструктор должен удалить все узлы, и для этого вы можете использовать Remove()
.
List::~List() {
while (Size > 0) {
Remove(CurrentNode);
}
delete HeadNode;
}
Также у вас есть ошибка в Next()
, я думаю, вы имеете в виду Size == 0
.
List::~List()
. Это деструктор.