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

时间:2019-05-29 01:03:28

标签: c++

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

1 个答案:

答案 0 :(得分:0)

析构函数应删除所有节点,您可以使用Remove()来做到这一点。

List::~List() {
    while (Size > 0) {
        Remove(CurrentNode);
    }
    delete HeadNode;
}

另外,您在Next()中有一个错误,我想您的意思是Size == 0