Avatar ·

Warum kann man std::unique_ptr ohne std::move aus einer Funktion zurückgeben?

Hallo! Ich habe vor kurzem angefangen, C++11 und Smart Pointer zu lernen, und bin bei std::unique_ptr verwirrt. Ich weiß, dass unique_ptr nicht kopiert werden kann – nur verschoben. Zum Verschieben wird normalerweise std::move() verwendet. Aber mir ist ein seltsames Verhalten aufgefallen: Wenn ich eine Funktion schreibe, die einen unique_ptr erstellt und zurückgibt, meckert der Compiler nicht, selbst wenn ich std::move() nicht aufrufe. Hier ist ein Beispiel: ```cpp #include std::unique_ptr createInt() { std::unique_ptr ptr = std::make_unique(42); return ptr; // Ohne std::move() – und es funktioniert! } int main() { std::unique_ptr p = createInt(); return 0; } ``` Warum wird das kompiliert? Schließlich verbietet unique_ptr das Kopieren! Wenn ich dasselbe mit einer normalen Variable in einer anderen Funktion versuche, zum Beispiel