2012-11-12 36 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分配的內存呢? –

相關問題