C++将 2D 数组(由 uniqe_ptr 引用)合并为 3D 数组



我需要将三个 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));

相关内容

  • 没有找到相关文章

最新更新