2

データを格納するために 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 はスマート ポインターまたは参照カウントを使用して追跡するので問題ありませんか?

4

1 に答える 1

1

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

array_viewメモリを所有していません。

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

あなたのコードはうまくいきません。

于 2016-04-09T22:55:08.613 に答える