2016-04-09 14 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が追跡するためにスマートポインタまたは参照カウントを使用するため、OKですか?

答えて

1

multi_arrayは、メモリを所有しています。

array_viewは、メモリを所有しています。

所有権の共有はありません。

コードはうまく動作しません。