使用pop_back的C ++析构函数

时间:2014-04-25 07:31:11

标签: c++ class linked-list destructor

我目前正在学习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列表。我认为需要做的是我需要找出一种方法来删除链表中的每个元素。

2 个答案:

答案 0 :(得分:2)

假设tempList已正确分配和解除分配(现在不是),您不必调用任何内容 - 列表中的元素将自动销毁。

最简单,最干净的解决方案是根本没有指针:

class Test
{
    private: 
        list<char> tempList;
    public:
        Test()
        {
            tempList.push_back('a');
            tempList.push_back('b');
            tempList.push_back('c');
        }
};

答案 1 :(得分:1)

标准类std::list有自己的析构函数。当调用类Test的析构函数时,它依次调用std :: list的析构函数。无需使用pop_back来删除列表中的元素。它是析构函数中的超级操作。 std::list构造函数分配的内存将与放置在那里的字符一起删除。