0

3つの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};
4

1 に答える 1

2

aの背後にある考え方は、ポイントされたオブジェクトの唯一の所有権を持っているstd::unqiue_ptrということです。投稿されたとおりにコードを構造化すると、この前提と矛盾します。これは、別の変数が、によって所有されるオブジェクトへのポインターを持つようになったためです。std::unique_ptrstd::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));
于 2013-03-26T13:26:39.307 に答える