Wiem, że kontenery STL, takie jak vector
, kopiują obiekt po jego dodaniu. push_back
metoda wygląda następująco:W jaki sposób kontenery STL kopiują obiekty?
void push_back (const T& x);
Jestem zaskoczony, aby zobaczyć, że zajmuje pozycję jako odniesienia. Napisałem przykładowy program, aby zobaczyć, jak to działa.
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);
Kopiuje przedmiot i widzę, że dzwoni copy-konstruktora.
Moje pytanie brzmi, kiedy push_back
przyjmuje pozycję jako referencję, w jaki sposób wywołuje ona konstruktora kopiowania? Czy może czegoś tutaj brakuje?
Jakieś myśli ..?
To jest OK, gdy T ma konstruktor bez parametrów. Ale co się stanie, gdy ma sparametryzowany konstruktor? Jak wektor może zainicjować nowy obiekt? –
To jest OK, gdy T ma _copy constructor_. Który jest domyślnie i jeśli go zaimplementujesz, chyba że jawnie zrobiłeś to 'private' lub' protected'. – Thomas
Edytowałem swoją odpowiedź, aby wyjaśnić. – Thomas