Даже если массивы 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
для копирования данных из одного массива в другой.
Вы можете использовать 'std :: array'. – celtschk