在c ++中删除指针与对象的向量

时间:2011-01-17 18:34:05

标签: c++ pointers vector

我有一个指向对象的指针向量(我将它们作为指针,因为我会淹没很多位置,而且我认为只需交换指针就可以快得多,而不是交换指针。整个对象。

无论如何,我最终需要删除向量,但它指向的对象仍然需要有效。文档似乎说它会在向量中的每个对象上调用析构函数。当它是一个对象数组时这是有意义的,但如果数组是一个指向对象的指针数组,那么指针指向的对象是否也会被删除,或者我是否需要手动删除它们?

如果它们被自动删除,保持对象的唯一方法(比如它们在不同的向量中使用)是将对象实际复制到另一个位置,并使向量中的指针指向那些对象(而不是原件)?

谢谢。

6 个答案:

答案 0 :(得分:4)

指针值上调用析构函数不会执行任何操作。 (另一方面,在指针值上调用delete运行指向对象的析构函数,释放内存。)

对于指向对象的指针数组,如果这是您想要的,则必须手动释放对象。

答案 1 :(得分:1)

如果你有一个指针向量,如果你删除(或清除)向量,实际的对象应该仍然存在。

答案 2 :(得分:1)

您可以在向量中使用智能指针,例如Boost shared_ptr

答案 3 :(得分:1)

它确实会破坏容器中的任何对象。但是,由于容器中的所有对象都是指针,因此不会做任何事情。

阅读你的问题,这听起来就像你想要的那样,所以你很好。

答案 4 :(得分:1)

没关系 - 这就是delete关键字的原因。如果超出范围,则调用对象的析构函数。如果指针超出范围,那么它往往是内存泄漏。这同样适用于此,因此您不必做任何特别的事情。

它们将继续存在。

答案 5 :(得分:0)

无论如何,我最终需要删除矢量,但它指向的对象仍然需要有效。文档似乎说它会在向量中的每个对象上调用析构函数。当它是一个对象数组时这是有意义的,但如果数组是一个指向对象的指针数组,那么指针指向的对象是否也会被删除,或者我是否需要手动删除它们?

首先,请阅读:http://crazyeddiecpp.blogspot.com/2010/12/pet-peeve.html

现在问问自己,文档是否说向量会删除它包含的每个对象指向的每个对象?

如果你能用'否'来回答这个问题那么你就有了。

如果你能用“是”回答这个问题......那么......尝试不同的文档。

相关问题