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
几乎肯定是一个更好的选择,除非您需要能够插入和删除任意元素,而不会使其他元素的迭代器无效。)