我在理解如何在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类,我将如何处理这个特定问题?
答案 0 :(得分:4)
解决问题的理想方法是使用 Smart Pointers 作为容器的元素而不是原始指针。
否则,您必须手动 do the memory management yourself 。
答案 1 :(得分:2)
存储在向量中的对象无论如何都存储在堆上(在向量分配的空间中)。
分别分配对象(选项B)几乎没有什么优势,除非你打算以某种方式在向量之外管理它们。在这种情况下,向量可以破坏它存储的指针,并信任真正的所有者来销毁对象本身。
答案 2 :(得分:0)
简短的回答是,大多数人根本不处理这类事情。标准容器(例如,std::vector
)根本不存储原始对象 - 它们存储对象的副本。他们为自己的副本管理存储,由您来管理原始存储。
在存储指针的情况下,您基本上负责管理指针指向的存储。容器仍在制作(并管理存储)副本,但它只是指针的副本,而不是它所引用的对象。这取决于你处理。