Здравствуйте, Аноним, Вы писали:
А>Почему в C++ запрещено использование любых конструкторов, кроме конструктора по умолчанию, в случае создания массива объектов?
Почему же запрещено?
struct foo
{
foo(const char* = "test", int = 123) {} // конструктор, используемый в роли конструктора по умолчанию
foo(int) {} // конструктор для приведения типа
foo(int,int,int) {}
};
foo a[10] = { foo(), 123, "qqq", foo(1,2,3), /* остальные элементы будут сконструированы по умолчанию - foo("test",123) */ };
foo *b = new foo[10]; // все элементы будут сконструированы по умолчанию - foo("test",123)
Здравствуйте, Аноним, Вы писали:
А>Почему в C++ запрещено использование любых конструкторов, кроме конструктора по умолчанию, в случае создания массива объектов?
не запрещено
// определяет массив из 16 объектов Account. Каждый элемент по очереди инициализируется конструктором по умолчанию.
Account table[ 16 ];
// Можно явно передать конструкторам аргументы внутри заключенного в фигурные скобки списка инициализации массива
Account pooh_pals[] = { "Piglet", "Eeyore", "Tigger" };
YLS>MyClass* A = new MyClass[size](first, second);
YLS>
YLS>Какие-то проблемы реализации?
Никаких, только зачем это всё при живом векторе-то?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
YLS>>Какие-то проблемы реализации? E>Никаких, только зачем это всё при живом векторе-то?
Единственная проблема — если класс не assignable и/или не copy constructible.
Тогда живым вектором не отделаешься.
Придётся городить собственный огород "по мотивам". Упрощённо,
С другой стороны, для крупных объектов (которые некопируемы по причине своих размеров, в том числе), можно припахать ptr_vector.
А для мелких — пересмотреть в сторону копируемости, либо двухфазной инициализации. (Первая фаза — в конструкторе, вторая — ручной вызов функции).
Здравствуйте, Char_Int, Вы писали:
C_I>Здравствуйте, Аноним, Вы писали:
А>>Почему в C++ запрещено использование любых конструкторов, кроме конструктора по умолчанию, в случае создания массива объектов?
C_I>не запрещено
C_I>
C_I>// определяет массив из 16 объектов Account. Каждый элемент по очереди инициализируется конструктором по умолчанию.
C_I>Account table[ 16 ];
C_I>// Можно явно передать конструкторам аргументы внутри заключенного в фигурные скобки списка инициализации массива
C_I>Account pooh_pals[] = { "Piglet", "Eeyore", "Tigger" };
C_I>
Добавлю что в списке инициализации конструкторы могут вызываться разные