c++ - 包含新指针的向量的 C++ 分配
问题描述
当使用向量来保存指向新分配对象的指针时,例如
vector<int*> intP;
for(int i = 0; i < N; ++i){
intP.push_back(new int(i));
}
我知道我们必须自己释放每个int*
指向的所有内容,通常使用for_each
in <algorithm>
。我还知道,当向量的大小增加到其容量时,它将通过分配两倍大小的新空间、将旧空间中的所有内容复制到新空间以及销毁旧空间中的所有内容来重新分配更多空间。但这不会导致内存泄漏,因为没有人删除 old 指向的内容int*
?
解决方案
让我们首先更好地定义什么是“泄漏”。当您动态分配了无法再访问的内存时,就会发生内存泄漏。
这意味着您无法释放它,甚至无法知道它在哪里!这可能是在您调用之前指针超出范围delete
或其他一些事情的结果。
在您的情况下,确实std::vector
会破坏指向动态内存的指针数组,但在此之前,它会复制所有指针。因此,由于您仍然能够访问动态内存,因此没有泄漏!
您可能还对std::unique_ptr
哪个将为您进行内存管理感兴趣,因此您根本不必担心泄漏!
推荐阅读
- opencv - Kinect v2 与 Openni 2 并与 OpenCV 3.1.0 一起显示
- laravel - Laravel API / Passport - 更改身份验证用户
- apache - 我有一个 Web 服务器 Apache 设置问题
- java - 如何使用 jdbc oracle 插入和选择全局临时表?
- angular - Angular 6 组件中的循环依赖
- reactjs - 如何将 React 与 ES6 模块一起使用
- python - Django Ajax 评论系统
- apache-spark-sql - Spark SQL 使用覆盖模式将 DF 写入 Teradata 表会丢弃表,尽管 truncate 为 True
- c# - ASPNET - 无法使用此动词类型 GET 发送内容主体
- mercurial - Mercurial 如何忽略包含已添加到源代码管理的文件的子文件夹