处理容器类中动态分配的内存
Dealing With Dynamically Allocated Memory in Container Classes
我很难理解容器是如何在C++中实现的。具体来说,我如何处理在堆栈上分配的数据与在堆中分配的数据。例如:
vector<int> VectorA;
VectorA.push_back (1);
VectorA.push_back (2);
VectorA.push_back (3);
vector<int*> VectorB;
VectorB.push_back (new int (1));
VectorB.push_back (new int (2));
VectorB.push_back (new int (3));
如何确保VectorB中的整数被正确删除。我记得在某个地方读到std::vector只调用析构函数,实际上并没有删除任何内容。此外,如果我想实现我自己的LinkedList类,我将如何处理这个特定的问题?
处理此问题的理想方法是使用智能指针作为容器的元素,而不是原始指针
否则,您必须手动自己进行内存管理。
存储在向量中的对象无论如何都存储在堆上(在向量分配的空间中)。
单独分配对象(选项B)几乎没有什么好处,除非您打算以某种方式在向量之外管理它们。在这种情况下,向量可以销毁它存储的指针,并信任真正的所有者来销毁对象本身。
简单的答案是,大多数人根本不处理这样的事情。标准容器(例如std::vector
)根本不存储原始对象——它们存储对象的副本。他们为自己的副本管理存储,而由您来管理原始副本的存储。
在存储指针的情况下,您基本上负责管理指针指向的存储。容器仍在制作(并管理其存储)副本,但它只是指针的副本,而不是它所引用的对象。这由你来处理。
相关文章:
- 对具有动态分配的内存和析构函数的类对象的引用
- 调用析构函数以释放动态分配的内存
- 在运行时为动态分配的内存输入值
- 释放动态分配的内存时是否需要执行此额外步骤
- 动态分配字符数组的内存
- 销毁C++中动态分配的内存(数组对象)
- 删除类成员的动态分配内存的最佳方法是什么
- 动态分配的内存构造函数
- 为什么动态分配的内存总是16字节对齐
- 如果您为类的一个对象动态分配内存作为参数,会发生什么
- 为什么动态分配的两个变量的内存位置不是连续的?
- 为浮点数组动态分配内存
- 动态分配 8 字节的内存
- 包含动态分配内存作为值的映射的取消定位速度有多快?
- STD分配器是否会在堆上动态分配内存?它可以安全地删除内存吗?
- 为什么不能在 Visual C++ 中动态分配堆栈内存?但海湾合作委员会可以做到
- 在C 中动态分配的内存的问题
- 为什么在 C++ 执行删除操作后仍可以访问释放的动态分配的内存
- 对内存动态分配的类不使用"*"的逻辑
- 如果我将内存动态分配给静态变量,我应该释放它还是会自动释放它