在C++中,如何使现有向量的副本指向相同的分配内存?2向量对象指向相同的分配内存
如:
vector<int> o1;
o1.push_back(1);
vector<int> o2;
//Make o2 share same memory as o1
o2[0]=2;
cout << o1[0]; //display 2
编辑:我还没有明确的目标:如果O1被分配在堆上,并得到破坏,我怎么可以创建一个对象02将指向分配了相同内存作为o1保持在o1范围之外?
在C++中,如何使现有向量的副本指向相同的分配内存?2向量对象指向相同的分配内存
如:
vector<int> o1;
o1.push_back(1);
vector<int> o2;
//Make o2 share same memory as o1
o2[0]=2;
cout << o1[0]; //display 2
编辑:我还没有明确的目标:如果O1被分配在堆上,并得到破坏,我怎么可以创建一个对象02将指向分配了相同内存作为o1保持在o1范围之外?
有一个boost::shared_array
模板。
但是,它共享固定大小的数据阵列,您无法修改大小。
如果你想分享一个可调整大小的矢量然后使用
boost::shared_ptr< vector<int> >
什么你也可以做的是swap
矢量存储到不同的载体。
{
std::vector<int> o1; // on the stack
// fill o1
std::vector<int> * o2 = new std::vector<int>; // on the heap
o2->swap(o1);
// save o2 somewhere or return it
} // o2 now owns the exact memory that o1 had as o1 loses scope
C++11
将在“移动”语义带来让您保持实际内存在O1与std::move
从而
std::vector<int> && foo()
{
std::vector<int> o1;
// fill o1
return std::move(o1);
}
// from somewhere else
std::vector<int> o2(foo());
使o2
参考,o1
std::vector<int> &o2 = o1;
这不会产生“两个矢量对象”。 – juanchopanza
同意,问题不是100%清楚。我不得不GUESS一个指针或参考是他的意思。 – billz
是的,它确实适用于我给出的简化示例。但是如果第一个对象o1被破坏但是我想保留它为o2分配的内存呢? –
你不能。无法使建议的解决方案起作用。目前未公开的问题可能有解决方案,但需要明确要求。 –
你可以使用'o2'作为引用:'vector&o2(o1);' –
hmjd
或者使用shared_ptr>或者boost :: shared_array < int >,尽管boost :: shared_array不能调整你的数组大小。 –
CashCow