Я знаю, что контейнеры STL, такие как vector
, копируют объект при его добавлении. push_back
метод выглядит так:
void push_back ( const T& x );
Я удивлен, увидев, что элемент принимается как ссылка. Я написал пример программы, чтобы посмотреть, как она работает.
struct Foo
{
Foo()
{
std::cout << "Inside Foo constructor" << std::endl;
}
Foo(const Foo& f)
{
std::cout << "inside copy constructor" << std::endl;
}
};
Foo f;
std::vector<Foo> foos;
foos.push_back(f);
Это копирует объект, и я вижу, что он вызывает copy-constructor.
Мой вопрос: когда push_back
берет элемент в качестве ссылки, как он вызывает конструктор-копию? Или я что-то здесь упускаю?
Какие-нибудь мысли..?