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