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