如果我有一个 std::vector 定义为:
std::vector<Object*>* myObjects;
然后调用:
delete myObjects;
那么 myObjects 中的元素也会被删除吗?使用 std::array 或任何其他 stl 容器有什么区别吗?
提前致谢
如果我有一个 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;
如果在他们持有的指针上调用delete
s vector*
,delete
那么你会遇到一堆麻烦(双关语),因为你会delete
使用第一个delete
产生未定义行为的自动变量(一件坏事)。
当您知道指针是动态分配的,或者更好地使用并且您永远不需要调用任何东西时vector
,您必须自己手动迭代指针。delete
std::unique_ptr
delete
此外,您可能首先不需要指向 a 的指针vector
,但我不会评判您,因为我不知道您的情况。
至于std::array
and std::vector
,您需要std::array
在编译时知道您的大小,并且您不能在运行时调整它的大小,但vector
没有这些限制。
boost::ptr_vector<int>