处理容器类中的动态分配内存

时间:2012-01-14 21:41:14

标签: c++ stl containers

我在理解如何在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类,我将如何处理这个特定问题?

3 个答案:

答案 0 :(得分:4)

解决问题的理想方法是使用 Smart Pointers 作为容器的元素而不是原始指针。
否则,您必须手动 do the memory management yourself

答案 1 :(得分:2)

存储在向量中的对象无论如何都存储在堆上(在向量分配的空间中)。

分别分配对象(选项B)几乎没有什么优势,除非你打算以某种方式在向量之外管理它们。在这种情况下,向量可以破坏它存储的指针,并信任真正的所有者来销毁对象本身。

答案 2 :(得分:0)

简短的回答是,大多数人根本不处理这类事情。标准容器(例如,std::vector)根本不存储原始对象 - 它们存储对象的副本。他们为自己的副本管理存储,由您来管理原始存储。

在存储指针的情况下,您基本上负责管理指针指向的存储。容器仍在制作(并管理存储)副本,但它只是指针的副本,而不是它所引用的对象。这取决于你处理。