0

我需要将三个 2D 数组合并为一个 3D 数组。

我正在使用 unique_ptr 来引用二维数组。

总的来说,我对智能指针和 C++ 很陌生,所以很可能这是一个明显的错误。

int imgsize = 15;
std::unique_ptr<float[]> redptr(new float[imgsize]);
std::unique_ptr<float[]> greenptr(new float[imgsize]);
std::unique_ptr<float[]> blueptr (new float[imgsize]);

redptr = redChannel._data;
greenptr = greenChannel._data;
blueptr = blueChannel._data;

float * colourArr[3] = {redptr,greenptr,blueptr};
4

1 回答 1

2

a 背后的想法std::unqiue_ptr是,拥有指向对象的std::unique_ptr唯一所有权构建发布的代码与这个前提相矛盾,因为另一个变量现在有一个指向std::unique_ptr. 发布的代码很危险,因为它是悬空指针的潜在来源(一旦std::unique_ptr超出范围,指向的对象将被破坏,但 的元素colourArr仍将指向现在被破坏的对象)。

建议使用 a 而不是使用std::unique_ptr和显式动态分配内存std::vector<std::vector<float>>。这将管理内存并通过以下方式提供数组样式访问operator[]

// Construct a vector contain 3 elements,
// where each element is a vector containing 'imgsize' floats.
std::vector<std::vector<float>> colourArr(3, std::vector<float>(imgsize));
于 2013-03-26T13:26:39.307 回答