_merlinO_
2019-10-07 12:47:49 UTC
Come ho scritto nel post poco più sotto sto facendo uno studio sulle collezioni della STL library. Tutto è partito dall'esigenza di spostare oggetti tra liste diverse (delle stesso tipo), avendo sempre e comunque un'istanza unica e univoca dell'elemento (niente copie e duplicati).
Per esempio: Abbiamo una classe Foo che contiene all'interno una semplice stringa "messaggio". I costruttori e operatori per copia e spostamento sono tutti implementati. Che differenze vi aspettate tra questo codice:
typedef std::list<Foo> foo_list;
foo_list collection1 = {
std::move(Foo{"Hello"}),
std::move(Foo{"collections"}),
std::move(Foo{"!!"})
};
foo_list collection2 = std::move(collection1);
e questo?
typedef std::list<std::shared_ptr<Foo>> foo_list;
foo_list collection1 = {
std::make_shared<Foo>("Hello"),
std::make_shared<Foo>("collections"),
std::make_shared<Foo>("!!"),
};
foo_list collection2 = std::move(collection1);
Per esempio: Abbiamo una classe Foo che contiene all'interno una semplice stringa "messaggio". I costruttori e operatori per copia e spostamento sono tutti implementati. Che differenze vi aspettate tra questo codice:
typedef std::list<Foo> foo_list;
foo_list collection1 = {
std::move(Foo{"Hello"}),
std::move(Foo{"collections"}),
std::move(Foo{"!!"})
};
foo_list collection2 = std::move(collection1);
e questo?
typedef std::list<std::shared_ptr<Foo>> foo_list;
foo_list collection1 = {
std::make_shared<Foo>("Hello"),
std::make_shared<Foo>("collections"),
std::make_shared<Foo>("!!"),
};
foo_list collection2 = std::move(collection1);