[Anfängerfrage] Kopierkonstruktor
-
Item foo() { Item x; return x; } main() { Item x = foo(); }Wie wird x (aus der main) initialisiert? Kommt hier der Kopierkonstruktor zum Einsatz oder etwas anderes?
Falls Kopierkonstruktor:
std::unique_pointer<Item> foo() { return std::unique_pointer<new Item>; } main() { std::unique_pointer<Item> p = foo(); }WIeso klappt das dann? Ich dachte unique_pointer kann man nicht kopieren ...?
-
Google Move-Konstruktor.
-
cooky451 schrieb:
Google Move-Konstruktor.
Kurz-Erkärung: Mit C++11 gibts auch move-Operationen für r-Values. Ohne diese move-Operationen kann man unique_ptr vergessen. Deine zurückgegebenen Items werden gemoved, wenn denn ein move-ctor vorhanden ist. Das ist dann der Fall, wenn du entweder selber einen definierst oder aber weder move- noch copy-Ctor selber definierst (dann werden beide generiert).
-
Im ersten Bsp. wird je nach Optimierungseinstellung entweder
1. Standardkonstruktor aufgerufen, dann
2. Kopierkonstruktor oder Movekonstruktor falls vorhandenoder
1. Nur der Standardkonstruktor augerufenoder
1. garnix passierenIm zweiten Bsp. wird, da bei unique_ptr vorhanden der Movekonstruktor (vom unique_ptr) aufgerufen, bzw. auch gar nix, da alles wegoptimiert.
-
--
-
brotbernd schrieb:
Im ersten Bsp. wird je nach Optimierungseinstellung entweder
1. Standardkonstruktor aufgerufen, dann
2. Kopierkonstruktor oder Movekonstruktor falls vorhandenoder
1. Nur der Standardkonstruktor augerufenoder
1. garnix passierenIm zweiten Bsp. wird, da bei unique_ptr vorhanden der Movekonstruktor (vom unique_ptr) aufgerufen, bzw. auch gar nix, da alles wegoptimiert.
Der Defaultkonstruktor wird ganz sicher aufgerufen werden (wenn Item eine Klasse ist). Ist der trivial, kann man das aber nat. nicht beobachten.