Possible Duplicate:
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 容器有什么不同吗?
提前致谢
不,这就是原因。
考虑这两种情况:
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;
如果在 vector*
上调用 delete
并在它们持有的指针上调用 delete
,那么你会遇到一堆麻烦(双关语意),因为您将 delete
与第一个 delete
自动变量,这会产生未定义的行为(一件坏事)。
当您知道指针是动态分配的时,您必须自己手动迭代 vector
和 delete
指针,或者更好的是,使用 std::unique_ptr
并且您永远不需要对任何内容调用 delete
。
此外,您可能一开始就不需要指向 vector
的指针,但我不会对您进行评判,因为我不知道您的情况。
至于std::array
和std::vector
,你需要在编译时知道你的std::array
的大小时间并且您不能在运行时调整它的大小,但是 vector
没有这些限制。