2012-11-12 39 views
-2

在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范围之外?

+1

你不能。无法使建议的解决方案起作用。目前未公开的问题可能有解决方案,但需要明确要求。 –

+1

你可以使用'o2'作为引用:'vector &o2(o1);' – hmjd

+0

或者使用shared_ptr >或者boost :: shared_array < int >,尽管boost :: shared_array不能调整你的数组大小。 – CashCow

回答

0

有一个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()); 
2

使o2参考,o1

std::vector<int> &o2 = o1; 
+3

这不会产生“两个矢量对象”。 – juanchopanza

+0

同意,问题不是100%清楚。我不得不GUESS一个指针或参考是他的意思。 – billz

+0

是的,它确实适用于我给出的简化示例。但是如果第一个对象o1被破坏但是我想保留它为o2分配的内存呢? –

相关问题