У вас есть массив указателей, и вы хотите инициализировать массив (каждый элемент указателя) с другим значением (результат выделения). Невозможно выполнить такую инициализацию в объявлении, кроме как предоставить значение для каждого элемента:
static mini* ssn[4] = {new mini(), new mini(), new mini()};
Каждый элемент, для которого вы не указали значение, будет инициализирован значением по умолчанию 0
.
Если вам нужен массив фиксированной длины, лучше использовать std::array
. C ++ имеет мощную систему типов, используйте ее. В этом случае инициализация может быть обобщена:
struct Mini {
int x;
};
template <class Ar, class F, size_t... I>
static auto init(F factory, std::index_sequence<I...>) noexcept {
return Ar{factory(I)...};
}
using Array = std::array<Mini*, 20>;
static Array ssr(init<Array>([](...) { return new Mini(); }, std::make_index_sequence<20>()));
Это фактически то же самое:
static Array ssr(Array{new Mini(), new Mini(), ...})
Компилятор оптимизирует копию Array
. Обратите внимание, что для этого решения требуется c ++ 14, хотя его можно адаптировать для c ++ 11.