C++对包含新指针的向量的分配
C++ allocation of vector which contains newed pointers
使用向量保存指向新分配对象的指针时,如
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
感兴趣,它将为您进行内存管理,因此您根本不必担心泄漏!
相关文章:
- 用字符串的向量分配字符串向量
- 如何将向量分配给参考变量?
- 如何将C++向量分配给非表全局变量
- 向量分配上的 C++ 分割错误
- 如何将int分解为数字并以相同的顺序为向量分配数字
- 将向量分配给一个元素
- 将向量分配给向量向量的向量时,向量是范围的
- 带有Valgrind的C 的向量分配中的内存泄漏
- 将向量分配给另一个
- 为向量分配内存
- 为结构的整个向量分配结构的元素
- 将向量分配给结构的向量字段
- C++对象的向量:分配对象
- C++:通过从映射向量分配映射实例来填充映射的映射
- 将儿童的向量分配给祖父母的向量
- 使用 std::向量分配的类比 LOT 的指针分配慢
- C++ 向量分配问题
- 为什么向量分配会改变分配的向量
- 在C++中初始化向量时,你能给向量分配一个大的内存块吗
- 向量分配中的问题