在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