我正在使用boost::multi_array来存储一些数据。我使用 View 来处理数据,因为我需要处理不同维度的数据片。

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

特别是,我想使用数据 slice ( View )的副本。因此,我想做这样的事情:

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使用智能指针或引用计数来跟踪而行吗?

最佳答案

multi_array拥有内存。
array_view是否而不是拥有内存。

没有所有权共享。

您的代码无法正常工作。

09-11 17:32