Move Semantic vs. std::unique_ptr
-
Hi,
seit C++11 kann man ja durch die Move Semantik große Strukturen elegant als Rückgabewert von Funktionen verwenden.
Häufig kann ich mich allerdings nicht entscheiden, ob ich die Struktur 'moven' oder als unique_ptr zurückgeben soll.
Natürlich hat der unique_ptr zusätzlich viel mehr zu bieten, aber gibt es grundlegende Argumente welchen Ansatz man für welche Situation verwenden sollte?HugeClass create(); std::unique_ptr<HugeClass> create();
-
seit C++11 kann man ja durch die Move Semantik große Strukturen elegant als Rückgabewert von Funktionen verwenden.
Konnte man vorher dank copy elision auch. Es gibt bei
unique_ptr
diesbezüglich keinen Vorteil; es werden i.d.R. keinerlei Moves oder Kopien gespart.
-
Ich meinte das nicht nur auf die Geschwindigkeit, sondern insbesondere auch auf die Ownership bezogen.
class Foo { public: void giveMeAnImage(Image&&); void giveMeAnImage(std::unique_ptr<Image>); private: std::unique_ptr<Image> ptrImg; Image img; }
Der Nachteil bei der move semantic wäre, dass zu Begin ein gültiges, aber leeres Image Objekt besteht.
Ich glaube allerdings, dass ich ein Problem konstruiere wo keines ist ...
-
Wenn
Image
keinen Standardkonstruktor hat, kann manboost::optional<Image>
nehmen.
-
Wenn sich Image moven lässt, dann gibe es keinen Grund, wieso es keinen Default-Konstruktor haben könnte. Denn den "leeren State" muss es sowieso geben (nach einen move).