So che i contenitori STL come vector
copia l'oggetto quando viene aggiunto. push_back
metodo assomiglia:In che modo i contenitori STL copiano oggetti?
void push_back (const T& x);
Sono sorpreso di vedere che ci vuole l'elemento come di riferimento. Ho scritto un programma di esempio per vedere come funziona.
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);
Questo copia l'oggetto e posso vederlo sta chiamando costruttore di copia.
La mia domanda è, quando il push_back
prende l'elemento come riferimento, come chiama il costruttore di copia? O mi sto perdendo qualcosa qui?
Qualche idea ..?
Questo è OK quando T ha un costruttore senza parametri. Ma cosa succederà quando avrà un costruttore parametrizzato? In che modo il vettore può inizializzare un nuovo oggetto? –
Questo è OK quando T ha un _copy constructor_. Il che è, per impostazione predefinita, e se lo si implementa, a meno che non lo si sia reso esplicitamente 'private' o' protected'. – Thomas
Ho modificato la mia risposta per chiarire. – Thomas