C++ 关于C++;列表

C++ 关于C++;列表,c++,C++,列出狗; ............. 因此,我添加了许多狗的对象到它。 如果我调用dog.pop_front() 内存是否会自动释放?为了我弹出的物体 所以如果我打电话 list<Dog*> dog2; dog2.push_back(dog.front()); list dog2; dog2.向后推(dog.front()); 然后我会调用dog.pop_front()这样就可以了?我将假定Dog为类型struct 否。您仍然必须取消分配。否。您仍然必须取消分配。否,您必须通过

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

因此,我添加了许多狗的对象到它。 如果我调用
dog.pop_front()

内存是否会自动释放?为了我弹出的物体

所以如果我打电话

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

然后我会调用
dog.pop_front()
这样就可以了?我将假定Dog为类型struct

否。您仍然必须取消分配。

否。您仍然必须取消分配。

否,您必须通过调用delete或free来自行取消分配,具体取决于您如何分配。

否,您必须通过调用delete或free来自行取消分配,取决于您如何分配。

否。
Dog
对象的内存不会被释放。您必须使用
delete
操作符来解除分配它。

否。
Dog
对象的内存不会解除分配。您必须使用
delete
操作符取消分配它。

当您将
狗*
插入列表时,将创建指针副本并插入列表。从列表中弹出时,分配给该指针的内存被释放。分配给Dog对象的内存不会释放,因为它不是由列表分配的。您必须自己释放它。

当您将
狗*
插入列表时,将创建指针副本并插入列表。从列表中弹出时,分配给该指针的内存被释放。分配给Dog对象的内存不会释放,因为它不是由列表分配的。您必须自己释放。

狗的内存不会被删除;这件事你得自己做


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

不会删除
Dog
对象的内存;这件事你得自己做


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

您一直在询问此序列:

list<Dog*> dog2;
dog2.push_back(dog.front());  // time 1
dog.pop_front();              // time 2
list dog2;
dog2.向后推(dog.front());//时间1
dog.pop_front();//时间2
在时间1时,
dog2
dog
都有指向同一对象的指针

在时间2,指向该对象的指针将从
dog
中删除,并且仅在
dog2


假设您最初使用
new Dog
创建了该对象,则除非您通过调用
delete ptr

明确释放该对象,否则不会释放该对象。您一直在询问此序列:

list<Dog*> dog2;
dog2.push_back(dog.front());  // time 1
dog.pop_front();              // time 2
list dog2;
dog2.向后推(dog.front());//时间1
dog.pop_front();//时间2
在时间1时,
dog2
dog
都有指向同一对象的指针

在时间2,指向该对象的指针将从
dog
中删除,并且仅在
dog2


假设您最初使用
新狗
创建该对象,除非您通过调用
delete ptr
明确释放对象,否则对象将不会被释放。我建议使用
列表
来删除狗。

我建议使用
列表
来删除狗。

如果我调用list dog2,我没有理解您的意思;dog2.向后推(dog.front());然后我会给狗打电话。pop_front()这样就行了吗?@mousey:是的,这样就行了。这里需要注意的重要一点是指针的副本被插入到列表中。当你做pop时,这个副本被删除了。我没给你弄到Naveen,所以如果我叫ListDog2;dog2.向后推(dog.front());然后我会给狗打电话。pop_front()这样就行了吗?@mousey:是的,这样就行了。这里需要注意的重要一点是指针的副本被插入到列表中。当你弹出时,这个副本会被删除;dog2.向后推(dog.front());然后我会叫dog.pop_front()这样就行了?我将假定Dog为struct类型。@mousey如果两个容器具有相同的类型,则为yes。因此,如果我调用list dog2;dog2.向后推(dog.front());然后我会叫dog.pop_front()这样就行了?我将假定Dog为struct类型。@mousey如果两个容器持有相同的类型,则为yes。