Tengo un método que devuelve un objeto por valor. El método proviene de una biblioteca sobre la que no tengo control. Para el manejo adicional del objeto, quiero seguir trabajando con un unique_ptr en este objeto. Aquí hay un ejemplo:
#include <iostream>
#include <memory>
class Bla {
public:
Bla() { std::cout << "Constructor!\n"; }
~Bla() { std::cout << "Destructor!\n"; }
};
Bla GetBla() {
Bla bla;
return std::move(bla);
}
int main() {
auto bla = std::make_unique<Bla>(GetBla());
}
El ejemplo produce el siguiente resultado:
Constructor!
Destructor!
Destructor!
Destructor!
¿Por qué se llama al destructor de Bla 3 veces aquí? ¿Es correcta la forma en que creo el unique_prt?
std::move
no mueve nada. Simplemente se lanza de un tipo a otro.
std::move
on return
es un gran error.