如何释放c ++内存向量<int>*arr?

Mic*_*ael 4 c++ memory-management vector std

我有一个vector<int>* arr,实际上是一个2D数组.

arr =  new vector<int> [size];
Run Code Online (Sandbox Code Playgroud)

我这样做是否可以

delete arr;
Run Code Online (Sandbox Code Playgroud)

arr[i]自动删除,因为它是标准向量?

Lig*_*ica 10

不,你应该在使用delete[]时使用new[].

但这很疯狂.你在一个维度上使用了漂亮的友好容器,然后通过手动动态分配外部维度来取消所有的好处.

相反,只需使用a std::vector<std::vector<int> >或将两个维度展平为单个向量.

  • 这对于"但这很疯狂"值得+1. (2认同)

NPE*_*NPE 6

你的代码坏了.你应该使用delete[]new[]:

delete[] arr;
Run Code Online (Sandbox Code Playgroud)

解决此问题后,您的代码将正常运行.

我必须同意评论者的说法,C风格的矢量数组看起来有点疯狂.为什么不使用向量矢量呢?那将为您处理内存管理.

  • 我不会完全调用创建一个'vector`s"的C风格数组".我会称之为疯狂. (8认同)