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 次 |
最近记录: |