如果我在指向矢量std :: vector <Object*>*的指针上调用"delete",那么元素也会被删除吗?

Fre*_*nen 1 c++ memory allocation

可能重复:
对象的C++向量指针
是否std :: list :: remove方法调用每个被删除元素的析构函数?

如果我有一个std :: vector定义为:

std::vector<Object*>* myObjects;
Run Code Online (Sandbox Code Playgroud)

然后打电话:

delete myObjects;
Run Code Online (Sandbox Code Playgroud)

那么myObjects中的元素也会被删除吗?使用std :: array或任何其他stl容器有什么区别吗?

提前致谢

Set*_*gie 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;
Run Code Online (Sandbox Code Playgroud)

如果在调用deletevector*称为S delete上其所持有的指针,那么你会在一堆麻烦(双关语意),因为你会delete荷兰国际集团的自动变量与第一delete这将产生不确定的行为(坏事).

当你知道它们被动态分配或更好地使用时你必须自己手动迭代vectordelete指针std::unique_ptr,你永远不需要调用delete任何东西.

另外,你可能首先不需要指向a的指针vector,但我不会判断你,因为我不知道你的情况.

至于std::arraystd::vector,你需要知道你std::array在编译时的大小,你不能在运行时调整它的大小,但vector没有这些限制.