我正在学习链接列表并使用动态内存分配,但是我不明白如何编写析构函数,因为有些方法正在使用新方法,而析构函数方法超出了范围。顺便说一句,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--;
}
}
答案 0 :(得分:0)
析构函数应删除所有节点,您可以使用Remove()
来做到这一点。
List::~List() {
while (Size > 0) {
Remove(CurrentNode);
}
delete HeadNode;
}
另外,您在Next()
中有一个错误,我想您的意思是Size == 0
。