Подтвердить что ты не робот

Почему конструктор вызывается только один раз?

Рассмотрим приведенную ниже программу:

class A
{
    public:
    A(int i)
    {
            cout<<"Called"<<endl;
    }
};

int main()
{
    vector<A> v(5,A(1));
    return 0;
}       

Я получаю вывод: http://ideone.com/81XO6

 Called

Почему конструктор вызывается только один раз, даже если мы строим 5 объектов?
Как vector внутренне обрабатывается компилятором?

4b9b3361

Ответ 1

В вашем классе есть два конструктора, и вы смотрите только один из них. std::vector создает свои элементы, копируя их из исходного элемента, который вы предоставили. Для этой цели экземпляр-конструктор класса A вызывается 5 раз в вашем примере.

Конструктор-копир для A в вашем примере неявно объявлен и определен компилятором. Если вы этого желаете, вы можете сами заявить и определить. Если вы что-то напечатаете, вы увидите, что он вызывается не менее 5 раз.

Ответ 2

Он вызывается один раз, поскольку строка

vector<A> v(5,A(1)); 

вызовет конструктор, и строка станет   вектор v (5, X);

где X - объект, построенный после вызова конструктора.

После этого используется конструктор копирования.

Попробуйте добавить

A(const &A);

В объявлении класса, чтобы проверить это.