我目前正在自学C++,在创建析构函数时遇到了一些问题。
以下是我正在与斗争的主要部分的代码
#include <list>
using namespace std;
class Test
{
private:
list<char> *tempList;
public:
Test()
{
tempList->push_back('a');
tempList->push_back('b');
tempList->push_back('c');
}
~Test()
{
while (tempList->size() != 0)
{
tempList->pop_back();
}
}
};
正如您所看到的,我正在使用std::list来实现一个双链表。目前,我正在摆弄它,因此为什么变量被命名为tempList,以及为什么我在其中放入a、b、c。
我需要一些帮助的是创建析构函数。我尝试过创建自己的解决方案,但后来我开始在谷歌上搜索其他解决方案,没有一个看起来像我的。
我想让我的析构函数做的主要事情是清理tempList,它是一个双链接的char列表。我认为需要做的是,我需要找到一种方法来删除链接列表中的每个元素。
假设tempList
被正确分配和释放(现在不是),您不必调用任何东西——列表中的元素将自动销毁。
最简单、最干净的解决方案是根本没有指针:
class Test
{
private:
list<char> tempList;
public:
Test()
{
tempList.push_back('a');
tempList.push_back('b');
tempList.push_back('c');
}
};
标准类std::list
有自己的destrucdtor。当调用类Test的析构函数时,它依次调用std::list的析构因子。不需要使用pop_back
来从列表中删除元素。这是析构函数中的一个超浮点运算。std::list
构造函数分配的内存将与放置在那里的字符一起被删除。