c++ - 在 C++17 中删除分配在堆上的向量的规范方法
问题描述
我搜索了堆栈溢出,但似乎以前的答案可能已经过时,或者不是很清楚。
我的问题如下:
我想在向量中存储大量数据。为此,我将按如下方式在堆上分配向量:
#include <vector>
std::vector<int> *vector = new std::vector<int> (1000000000);
现在假设我在大型矩阵计算中使用这个向量。我现在想释放它。
在 c++17 中执行此操作的规范方法是什么?
我知道对于一个数组,即兴演奏如下:
int *arr = new int[1000000000];
delete[] arr
对 stl 向量执行此操作的等效(也是最有效)方法是什么?
解决方案
问题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)。
推荐阅读
- vue.js - 创建具有动态列和数据类型的网格(Vue.Js)
- mysql - SQL WHERE IN (ID1, ID2, ID3) vs WHERE UNIQUE_ID = IDX
- sql-server - 用于创建网络图/甘特图的 SQL 递归更新查询
- java - 将 JSON 对象(Set 类型)映射到 Hibernate 实体
- javascript - PHP 文件在接收到 webhook 后不执行 JavaScript XMLHttpRequest 但在浏览器中执行
- powershell - Powershell 捕获异常类型
- php - base64 编码文件内容给我空响应错误
- javascript - 错误:试图在设置之前获取 AngularJS 注入器
- javascript - 将数据插入集合时,Promises 和代码超时问题
- javascript - 通过检查并转到网络选项卡并检查以查看获取数据的请求来抓取 javascript 呈现的页面