Bonjour,

J'ai actuellement une fonction qui, une fois simplifiée, ressemble à ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
#include <memory>
 
struct Base {};
 
struct Derived : Base {};
 
std::unique_ptr<Base> foo() {
    std::unique_ptr<Derived> ptr;
    return std::move(ptr);
}
Ma question est : pourquoi le move est-il nécessaire ?

Pourquoi le code-suivant ne fonctionne-t-il pas ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
#include <memory>
 
struct Base {};
 
struct Derived : Base {};
 
std::unique_ptr<Base> foo() {
    std::unique_ptr<Derived> ptr;
    return ptr;
}
En effet, il me semblait que le move était implicite au moment d'un return.

Où me trompe-je ?

Je vous remercie d'avance,
Equinoxe