C++对包含新指针的向量的分配

C++ allocation of vector which contains newed pointers

本文关键字:向量 分配 指针 包含新 C++      更新时间:2023-10-16

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

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

我知道我们必须自己解除分配每个int*所指向的所有内容,通常在<algorithm>中使用for_each。我也意识到,当向量的大小增加到其容量时,它会通过分配双倍大小的新空间来重新分配更多的空间,将旧空间中的所有内容复制到新空间,并破坏旧空间中所有内容。但是,由于没有人删除旧int*指向的内容,这难道不会导致内存泄漏吗?

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

这意味着你无法处理它,甚至无法知道它在哪里!这可能是指针在调用delete之前超出范围的结果,也可能是其他原因。

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


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