首页 > 解决方案 > 包含新指针的向量的 C++ 分配

问题描述

当使用向量来保存指向新分配对象的指针时,例如

vector<int*> intP;
for(int i = 0; i < N; ++i){
   intP.push_back(new int(i));
}

我知道我们必须自己释放每个int*指向的所有内容,通常使用for_eachin <algorithm>。我还知道,当向量的大小增加到其容量时,它将通过分配两倍大小的新空间、将旧空间中的所有内容复制到新空间以及销毁旧空间中的所有内容来重新分配更多空间。但这不会导致内存泄漏,因为没有人删除 old 指向的内容int*

标签: c++vectorstl

解决方案


让我们首先更好地定义什么是“泄漏”。当您动态分配了无法再访问的内存时,就会发生内存泄漏。

这意味着您无法释放它,甚至无法知道它在哪里!这可能是在您调用之前指针超出范围delete或其他一些事情的结果。

在您的情况下,确实std::vector会破坏指向动态内存的指针数组,但在此之前,它会复制所有指针。因此,由于您仍然能够访问动态内存,因此没有泄漏!


您可能还对std::unique_ptr哪个将为您进行内存管理感兴趣,因此您根本不必担心泄漏!


推荐阅读