我应该如何在此代码中编写析构函数



我学习链表并使用动态内存分配,但我不明白如何编写析构函数,因为有些方法正在使用新的并且超出了析构函数方法的范围。顺便说一下,Node 基本上是一个有 2 个私有成员的类,一个 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.

最新更新