所以我添加了许多狗对象。
如果我拨打dog.pop_front();
内存会自动解除分配吗?对于我弹出的对象?
所以如果我打电话
list<Dog*> dog2;
dog2.push_back(dog.front());
然后我会打电话给dog.pop_front()
所以这会有效吗?我将假设Dog为类型struct。
答案 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,dog2
和dog
都有指向同一对象的指针。
在time2,指向该对象的指针已从dog
移除,并且只在dog2
中。
假设您最初使用new Dog
创建了该对象,则在通过调用delete ptr
明确释放该对象之前,该对象不会被释放
答案 3 :(得分:0)
没有。你仍然需要解除分配。
答案 4 :(得分:0)
不,你必须通过调用delete或free来解除分配,具体取决于你的分配方式。
答案 5 :(得分:0)
没有。 Dog
对象的内存不会被释放。您必须使用delete
运算符来解除分配。
答案 6 :(得分:0)
当您在列表中插入Dog*
时,会创建指针的副本并将其输入列表。当您从列表中弹出分配给此指针的内存时,将被释放。为 Dog 对象分配的内存未释放,因为它未由列表分配。你必须自己发布它。