Fre*_*nen 1 c++ memory allocation
如果我有一个std :: vector定义为:
std::vector<Object*>* myObjects;
Run Code Online (Sandbox Code Playgroud)
然后打电话:
delete myObjects;
Run Code Online (Sandbox Code Playgroud)
那么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;
Run Code Online (Sandbox Code Playgroud)
如果在调用delete上vector*称为S delete上其所持有的指针,那么你会在一堆麻烦(双关语意),因为你会delete荷兰国际集团的自动变量与第一delete这将产生不确定的行为(坏事).
当你知道它们被动态分配或更好地使用时你必须自己手动迭代vector和delete指针std::unique_ptr,你永远不需要调用delete任何东西.
另外,你可能首先不需要指向a的指针vector,但我不会判断你,因为我不知道你的情况.
至于std::array和std::vector,你需要知道你std::array在编译时的大小,你不能在运行时调整它的大小,但vector没有这些限制.
| 归档时间: |
|
| 查看次数: |
510 次 |
| 最近记录: |