Почему я не могу вызвать параметризованный конструктор с новым в c ++? - PullRequest
2 голосов
/ 21 февраля 2011

Если вы знаете проблему,

Предположим, у меня есть класс A, чей CTOR получает целое число;

Я не могу сделать следующее:

A* arr = new A[3](A(2), A(3), A(5));

Или любым другим способом инициализации нескольких членов массива. Я читаю вокруг, это просто невозможно.

У меня вопрос, почему, почему я могу сделать

A arr[3] = {A(1), A(2), A(3)};

а я не могу сделать выше? Память или что-то еще.

Большое спасибо!

Ответы [ 2 ]

9 голосов
/ 21 февраля 2011

Причина, по которой вы не можете сделать это в текущем стандарте C ++ (именуемом C ++ 03), является исторической. Это будет исправлено в следующем стандарте C ++ (в настоящее время ожидается его выпуск в этом году, что сделает его C ++ 11), который представит так называемый «унифицированный синтаксис инициализации».

Согласно Часто задаваемым вопросам по C ++ 0x Страуструпа , вы можете написать

A* p = new A[3] {A(1), A(2), A(3)};

Весьма вероятно, что ваш компилятор уже поддерживает это.

0 голосов
/ 21 февраля 2011

Я полагаю, что вы пытаетесь выполнить "равномерную инициализацию", которая включена в C ++ 0x.Я не понимаю, почему в списке инициализации используются A(int) части, я бы просто сделал это (что принято C ++ 98/03:

A arr[3] = {1, 2, 3};
...