我需要将三个 2D 数组合并为一个 3D 数组。
我正在使用unique_ptr来引用 2D 数组。
我对智能指针和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};
发布的代码很危险,因为它是悬空指针的潜在来源(一旦std::unqiue_ptr
背后的想法是std::unique_ptr
对指向的对象拥有唯一的所有权。将代码结构化为发布与这一前提相矛盾,因为另一个变量现在有一个指向std::unique_ptr
拥有的对象的指针。std::unique_ptr
超出范围,指向的对象将被破坏,但colourArr
的元素仍将指向现已销毁的对象(。
建议不要使用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));