C スタイルの配列は確かに単なる "美化されたポインター" ではありませんが、ネイキッド C スタイルの配列は、どのようにスライスしても割り当て可能ではありません。C++11 はその点で何も変更しません。
君の
*(vertex[0]) = *new GLfloat[3] {0.0f, 0.0f, 0.0f};
あなたが思っていることをしません。左側でvertex[0]
は、 へのポインターに減衰しvertex[0][0]
、これを*
. したがって、左側のサイズは単純にvertex[0][0]
です。
一方、新しく割り当てられた名前のない配列new GLfloat[3] {0.0f, 0.0f, 0.0f}
の要素へのポインターを返します。[0]
はその*
ポインタを逆参照し、その[0]
要素にアクセスできるようにします。
上記は、あなたの割り当てが実際に同等であることを意味します
vertex[0][0] = nameless_dynamic_array[0];
つまり、そうです
vertex[0][0] = 0.0f;
新しい配列がメモリリークになります。
配列全体を割り当てるには、それをクラスにラップする必要があります(std::array
標準のラッパーです)。または、何らかの理由で裸の C スタイルの配列を使用する必要がある場合は、std::copy
またはを使用memcpy
して、ある配列から別の配列にデータをコピーします。