Первый синтаксис называется инициализацией агрегата, и вы не можете применить его к динамически распределенному массиву. При динамическом распределении вы должны указать количество элементов, которые вы хотите инициализировать внутри квадратных скобок и (необязательно) значение по умолчанию в скобках (если вы хотите, чтобы массив был инициализирован). Значение по умолчанию будет одинаковым (если присутствует) для всех элементов.
Возможно, вы захотите изучить библиотеку boost :: assign, которая может поддерживать этот тип инициализации (не уверен). В качестве альтернативы вы можете (за счет большего количества кода) сделать это самостоятельно для типов POD:
int * array = new int[4];
{
int values[] = { 1,2,3,4 };
memcpy(array, values, sizeof(values));
}
Или не-стручка типов:
type * array = new type[4];
{
type values[] = { 1,2,3,4 }; // assuming type(int) constructor
std::copy(values, values+4, array); // better to use some magic to calculate size
}
Во всяком случае, оба эти решения требуют выделяя на местном уровне и копирование (бит-размер/C++) в динамически выделенную память.
Возможный дубликат [Inline array initialization] (http://stackoverflow.com/questions/4583628/inline-array-initialization) –