可能重复:
C++ Vector Pointers to Objects
Does std::list::remove method call destructor of each removed element?
如果我将std :: vector定义为:
std::vector<Object*>* myObjects;
然后致电:
delete myObjects;
然后还会删除myObjects中的元素吗?使用std :: array或任何其他stl容器有什么区别吗?
提前致谢
答案 0 :(得分:6)
不,这就是原因。
考虑以下两种情况:
int a, b, c;
auto stackvec = new vector<int*> { &a, &b, &c };
auto heapvec = new vector<int*> { new int, new int, new int };
delete stackvec;
delete heapvec;
如果在他们持有的指针上调用名为delete
的{{1}}上的vector*
,那么你就会陷入麻烦(双关语),因为你会delete
使用第一个delete
的自动变量产生未定义的行为(这是一件坏事)。
当你知道它们被动态分配时,你必须自己手动迭代delete
和vector
指针,或者更好,使用delete
并且你永远不需要调用{{1}在任何事情上。
另外,你可能首先不需要指向std::unique_ptr
的指针,但我不会判断你,因为我不知道你的情况。
对于delete
和vector
,您需要在编译时知道std::array
的大小,并且无法在运行时调整大小,但std::vector
已这些限制都没有。
答案 1 :(得分:1)
boost::ptr_vector<int>