Cómo pasar correctamente unique_ptr a un constructor o función
¡Hola! Recientemente comencé a estudiar C++11 y estoy tratando de entender los punteros inteligentes, en particular std::unique_ptr. Leí que ayudan a gestionar la memoria automáticamente y no requieren delete. Pero tengo un problema: no entiendo cómo pasar correctamente unique_ptr a funciones y constructores.
Aquí hay una clase simple que escribí:
```cpp
#include
#include
class MyClass {
public:
MyClass(std::unique_ptr ptr) : data(std::move(ptr)) {
std::cout << "Created with value: " << *data << std::endl;
}
private:
std::unique_ptr data;
};
void processData(std::unique_ptr ptr) {
std::cout << "Processing: " << *ptr << std::endl;
}
int main() {
auto p = std::make_unique(42);
// ¿Cómo pasar p al constructor de MyClass?
// MyClass obj(p); // ¡Error! No se copia.
// MyClass obj(std::move(p)); // ¿Está bien?
// ¿Cómo pasar a la función?
// processData(p); // También error.
// processData(std::move(p)); //
}