首页 > 解决方案 > 在 C++17 中删除分配在堆上的向量的规范方法

问题描述

我搜索了堆栈溢出,但似乎以前的答案可能已经过时,或者不是很清楚。

我的问题如下:

我想在向量中存储大量数据。为此,我将按如下方式在堆上分配向量:

#include <vector>
std::vector<int> *vector = new std::vector<int> (1000000000);

现在假设我在大型矩阵计算中使用这个向量。我现在想释放它。

在 c++17 中执行此操作的规范方法是什么?

我知道对于一个数组,即兴演奏如下:

int *arr = new int[1000000000];
delete[] arr

对 stl 向量执行此操作的等效(也是最有效)方法是什么?

标签: c++performancevectorstlheap-memory

解决方案


问题std::vector是它的数据总是在堆上。

因此,您不必std::vector在堆上分配自身。

std::vector利用称为 RAII(资源获取即初始化)的原理,这意味着当它完成内存时,它会为您取消分配它。

因此,这样做就足够了

{
std::vector<int> x{};
for (size_t i = 0; i < 50000; i++) x.push_back(x);
} // x gets out of scope, memory is freed

您不必手动释放std::vector的内存。

现在,假设您将自己分配std::vector在堆上,无论出于何种原因。然后你必须使用delete vector;它来释放它。不过,在这种情况下,我会建议std::unique_ptr<std::vector<T>>,因为它也使用相同的原则 (RAII)。


推荐阅读