使用pop_back的C++析构函数

C++ Destructors using pop_back

本文关键字:C++ 析构函数 back pop 使用      更新时间:2023-10-16

我目前正在自学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构造函数分配的内存将与放置在那里的字符一起被删除。