2014-01-19 4 views
0

Как вызвать конкретный конструктор класса внутри оператора new[]?Построение массива

#include <iostream> 

class foo 
{ 
    public: 
    foo(){std::cout << "\nfoo::foo()\n";} 
    foo(int param){std::cout << "\nfoo::foo(int)\n";} 
}; 

int main() 
{ 
    foo* my_array = new foo[45]; 
    return 0; 
} 

foo* my_array = new foo[45]; назвали бы foo() конструктор. Как вызвать foo(int) конструктор?

+0

Возможный дубликат [Инициализировать массив в конструкторе без использования конструктора или назначения по умолчанию] (http://stackoverflow.com/questions/3798276/initialize-array-in-constructor-without-using-default-constructor-or-assignment) –

ответ

4

Невозможно сделать это для необработанных массивов. Вы можете достичь аналогичного результата с станд :: векторы explicit vector (size_type n, const value_type& val = value_type(), const allocator_type& alloc = allocator_type());:

std::vector<foo> my_vector(45, 10); 

создаст вектор с 45 foo объектов, каждый созданный с помощью foo(10) вызова конструктора.

+1

Вы можете сократить это до 'std :: vector v (45, 10);' – Borgleader

+1

Вам не хватает параметра шаблона ? Стоит также отметить, что конструктор вызывается только один раз. Другие элементы будут копироваться, поэтому объект, который управляет ресурсами ressources, должен иметь надлежащий конструктор копирования. – typ1232

+0

Здесь * есть способ сделать это для массивов, это просто немного утомительно для длинных массивов. – juanchopanza

Смежные вопросы