What do I need to do before deleting elements in a vector of pointers to dynamically allocated objects?(在删除指向动态分配对象的指针向量中的元素之前,我需要做什么?)
问题描述
我有一个用指向对象的指针填充的向量.我正在努力学习良好的内存管理,并有一些一般性问题:
I have a vector that I fill with pointers to objects. I am trying to learn good memory management, and have a few general questions:
- 当我处理完向量后,我必须遍历它并对每个指针调用 delete 是真的吗?
- 为什么我不必在没有 new 语句的情况下对向量或我声明的任何其他变量调用 delete,但必须对指针调用 delete?
- 如果向量是在返回的函数中声明的(导致向量超出范围),C++ 是否会为我处理释放指针的内存?
推荐答案
- 是的
- 向量是使用模板内存分配器实现的,它们为您负责内存管理,因此它们有些特殊.但作为一般经验法则,由于堆栈和堆分配之间的差异,您不必对未使用
new关键字声明的变量调用delete.如果在堆上分配了东西,则必须将其删除(释放)以防止内存泄漏. - 没有.在遍历所有元素时,您必须明确调用
delete myVec[index].
- Yes
- Vectors are implemented using template memory allocators that take care of the memory management for you, so they are somewhat special. But as a general rule of thumb, you don't have to call
deleteon variables that aren't declared with thenewkeyword because of the difference between stack and heap allocation. If stuff is allocated on the heap, it must be deleted (freed) to prevent memory leaks. - No. You explicitly have to call
delete myVec[index]as you iterate over all elements.
例如:
for(int i = 0; i < myVec.size(); ++i)
delete myVec[i];
话虽如此,如果您打算将指针存储在向量中,我强烈建议使用 boost::ptr_vector 自动处理删除.
With that said, if you're planning on storing pointers in a vector, I strongly suggest using boost::ptr_vector which automatically takes care of the deletion.
这篇关于在删除指向动态分配对象的指针向量中的元素之前,我需要做什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在删除指向动态分配对象的指针向量中的元素之
基础教程推荐
- 静态库、静态链接动态库和动态链接动态库的 .lib 文件里面是什么? 2021-01-01
- 如何在 C++ 中初始化静态常量成员? 2022-01-01
- 如何将 std::pair 的排序 std::list 转换为 std::map 2022-01-01
- 我有静态或动态 boost 库吗? 2021-01-01
- 常量变量在标题中不起作用 2021-01-01
- 如何通过C程序打开命令提示符Cmd 2022-12-09
- 在 C++ 中计算滚动/移动平均值 2021-01-01
- C++结构和函数声明。为什么它不能编译? 2022-11-07
- 这个宏可以转换成函数吗? 2022-01-01
- 如何检查GTK+3.0中的小部件类型? 2022-11-30
