2016-04-09 39 views
2

我正在使用boost :: multi_array存储一些数据。我使用视图处理所有关于数据的工作,因为我需要处理不同维度的数据切片。boost :: multi_array内存管理和范围

我的问题是,如何管理boost :: multi_array的内存?

特别是,我想与我的数据切片(视图)的副本。因此,我愿做这样的事情:

typedef boost::multi_array<double, 2> MyContainer; 
typedef MyContainer::array_view<1>::type Slice1D; 

Slice1D copy(const Slice1D & slice) 
{ 
    MyContainer copyMemory(slice); 
    Slice1D sliceCopy = copyMemory[boost::indices[0][range()]]; 
    return sliceCopy; 
} 

void main() 
{ 
    ... 
    Slice1D copySlice = copy(mySlice); 
} 

我想知道这是否是错误的,因为包含副本的multi_array超出范围的拷贝函数返回时。或者它可以,因为multi_array使用智能指针或引用计数来跟踪?

回答

1

multi_array拥有内存。

array_view确实不是拥有内存。

没有共享所有权。

你的代码工作不好。