2015-09-03 2 views
1

Я пытаюсь инициализировать массив объектов с одинаковым значениемКак инициализировать массив объектов с одинаковым значением в конструкторе

class A 
{ 
    A(int a1) 
    { 
     var1 = a1; 
    } 

    var1; 
} 

int main(void) 
{ 
    // I want to initialize all the objects with 5 without using an array 
    A *arr = new A[10](5); // How to use the constructor to do something like this 
    return 0; 
} 

Как я хочу передать то же значение для всех объектов, есть чтобы избежать использования массива. то есть я хочу избежать, выполнив следующие действия:

A *arr = new A[10]{5, 5, 5, 5, 5, 5, 5, 5, 5, 5} 
+0

Простой ответ заключается в использовании вектора, но я предполагаю, что это из вопрос по какой-то причине. – chris

+0

Поскольку это массив 'int', как насчет простого вызова' memset() '? – syntagma

+0

@chris да, для меня почему-то не вариант для меня. –

ответ

4

Обычно мы избегаем сырых указателей, особенно если он не воплощена в std::unique_ptr или других типах автоматического (RAII) указателя.

Ваш первый выбор должен быть std::array, если размер известен во время компиляции, или std::vector, если вам нужен динамический размер или очень большой массив.

Второй выбор, если вы настаиваете на управлении памятью самостоятельно, заключается в использовании std::fill или std::fill_n от <algorithm>.

В этом случае std::fill_n вероятно уборщик:

A *arr = new A[10]; 
std::fill_n(&arr[0], 10, A(5)); 

Пожалуйста, по крайней мере, рассмотреть автоматическое управление указателем, хотя:

std::unique_ptr<A[]> arr(new A[10]); 
std::fill_n(&arr[0], 10, A(5)); 
Смежные вопросы