C++;使用pop_back的析构函数 我目前正在学习C++,我在创建析构函数方面遇到了一些麻烦。

C++;使用pop_back的析构函数 我目前正在学习C++,我在创建析构函数方面遇到了一些麻烦。,c++,class,linked-list,destructor,C++,Class,Linked List,Destructor,下面是我正在努力解决的主要部分的代码 #include <list> using namespace std; class Test { private: list<char> *tempList; public: Test() { tempList->push_back('a'); tempList->push_back('b');

下面是我正在努力解决的主要部分的代码

#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;
课堂测试
{
私人:
名单*圣殿骑士;
公众:
测试()
{
圣堂武士->推回('a');
圣堂武士->推回('b');
圣堂武士->推回('c');
}
~Test()
{
而(模板列表->大小()!=0)
{
圣堂武士->弹回();
}
}
};
如您所见,我使用std::list实现了一个双链接列表。现在我在摆弄它,所以变量名为templast,为什么我在里面放了a,b,c

我需要一些帮助来创建析构函数。我曾尝试过创建自己的解决方案,但后来我开始在谷歌上搜索其他解决方案,没有一个像我的


我想让我的析构函数做的主要事情是清理圣殿骑士,它是一个双重链接的字符列表。我认为需要做的是,我需要找出一种方法来删除链表中的每个元素。

假设
templast
被正确分配和解除分配(现在不是),您不必调用任何东西-列表中的元素将被自动销毁

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

class Test
{
    private: 
        list<char> tempList;
    public:
        Test()
        {
            tempList.push_back('a');
            tempList.push_back('b');
            tempList.push_back('c');
        }
};
类测试
{
私人:
圣殿骑士名单;
公众:
测试()
{
圣堂武士。推回('a');
圣殿骑士。推回('b');
圣殿骑士。推回('c');
}
};

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

这是您的实际代码吗?您从未分配
templast
指针。您的析构函数似乎没有明显错误,但同意
templast=new list
可能有助于您的构造函数。@RetiredInja这是我目前正在学习的代码。实现它的正确方法是什么?为什么要从指针开始?为什么不干脆
std::list templast?(尽管对于
char
std::vector
几乎肯定是一个更好的选择,除非您需要能够插入和删除任意元素,而不会使其他元素的迭代器无效。)