2013-03-26 115 views
0

我需要将三个2D数组合并成一个3D数组。C++将2d数组(合并为uniqe_ptr)合并到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}; 
+2

我看到这个代码段没有任何多维数组。 (也,'std :: vector') – 2013-03-26 15:12:27

+0

[你在做什么](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)? – 2013-03-26 15:14:35

回答

2

一个 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)); 
+0

有一个指向唯一指针所拥有的对象的指针是很常见的,并且安全地执行这个操作在大多数程序员的掌握之中。 – Puppy 2013-03-26 15:13:26

+0

感谢您对此的启发 - 现在看起来合乎逻辑 – mish 2013-03-26 15:17:27

+0

@hmjd:拥有对象的地址决不意味着对所述对象的所有权... – ildjarn 2013-03-26 21:21:31