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。