2向量对象指向相同的分配内存

2 vector objects pointing to the same allocated memory

本文关键字:分配 内存 向量 对象      更新时间:2023-10-16

在C 中,如何制作指向相同分配内存的现有向量的副本?

例如:

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在堆上分配并被破坏,我该如何创建一个对象O2,该对象将指向与O1相同的分配内存以将其保留在O1外面范围?

使o2引用o1

std::vector<int> &o2 = 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将带来"移动"语义,使您可以使用std::move保留O1中的实际记忆

std::vector<int> && foo()
{
      std::vector<int> o1;
       // fill o1
      return std::move( o1 );
}

// from somewhere else
std::vector< int > o2( foo() );