关于C ++列表的问题

时间:2010-05-07 05:55:07

标签: c++

列出狗;        .............        ............

所以我添加了许多狗对象。    如果我拨打dog.pop_front();

内存会自动解除分配吗?对于我弹出的对象?

所以如果我打电话

list<Dog*> dog2;
dog2.push_back(dog.front());

然后我会打电话给dog.pop_front()所以这会有效吗?我将假设Dog为类型struct。

7 个答案:

答案 0 :(得分:3)

Dog对象的内存被删除;你必须自己做。

但是,类型为Dog*的指针的内存,以及包裹它的任何“列表节点”对象,自动删除list类。

答案 1 :(得分:2)

我建议list<shared_ptr<Dog> >负责删除这些狗。

答案 2 :(得分:1)

你一直在询问这个序列:

list<Dog*> dog2;
dog2.push_back(dog.front());  // time 1
dog.pop_front();              // time 2

在time1,dog2dog都有指向同一对象的指针。

在time2,指向该对象的指针已从dog移除,并且只在dog2中。

假设您最初使用new Dog创建了该对象,则在通过调用delete ptr明确释放该对象之前,该对象不会被释放

答案 3 :(得分:0)

没有。你仍然需要解除分配。

答案 4 :(得分:0)

不,你必须通过调用delete或free来解除分配,具体取决于你的分配方式。

答案 5 :(得分:0)

没有。 Dog对象的内存不会被释放。您必须使用delete运算符来解除分配。

答案 6 :(得分:0)

当您在列表中插入Dog*时,会创建指针的副本并将其输入列表。当您从列表中弹出分配给此指针的内存时,将被释放。为 Dog 对象分配的内存未释放,因为它未由列表分配。你必须自己发布它。