Pourquoi peut-on retourner std::unique_ptr d'une fonction sans std::move ?
Bonjour ! J'ai récemment commencé à étudier C++11 et les pointeurs intelligents, et j'ai une confusion avec std::unique_ptr. Je sais que unique_ptr ne peut pas être copié — seulement déplacé. Pour le déplacement, on utilise généralement std::move(). Mais j'ai remarqué un comportement étrange : quand j'écris une fonction qui crée et retourne un unique_ptr, le compilateur ne se plaint pas, même si je n'appelle pas std::move().\n\nVoici un exemple :\n\n```cpp\n#include \n\nstd::unique_ptr createInt() {\n std::unique_ptr ptr = std::make_unique(42);\n return ptr; // Sans std::move() — et ça marche !\n}\n\nint main() {\n std::unique_ptr p = createInt();\n return 0;\n}\n```\n\nPourquoi cela se compile-t-il ? Pourtant unique_ptr interdit la copie ! Si j'essaie de faire la même chose avec une variable normale dans une autre fonction, par exemple