我有一个指向对象的指针向量(我将它们作为指针,因为我会淹没很多位置,而且我认为只需交换指针就可以快得多,而不是交换指针。整个对象。
无论如何,我最终需要删除向量,但它指向的对象仍然需要有效。文档似乎说它会在向量中的每个对象上调用析构函数。当它是一个对象数组时这是有意义的,但如果数组是一个指向对象的指针数组,那么指针指向的对象是否也会被删除,或者我是否需要手动删除它们?
如果它们被自动删除,保持对象的唯一方法(比如它们在不同的向量中使用)是将对象实际复制到另一个位置,并使向量中的指针指向那些对象(而不是原件)?
谢谢。
答案 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
现在问问自己,文档是否说向量会删除它包含的每个对象指向的每个对象?
如果你能用'否'来回答这个问题那么你就有了。
如果你能用“是”回答这个问题......那么......尝试不同的文档。