¿Cómo puedo pasar una std::unique_ptr
a una función? Digamos que tengo la siguiente clase:
class A
{
public:
A(int val)
{
_val = val;
}
int GetVal() { return _val; }
private:
int _val;
};
Lo siguiente no se compila:
void MyFunc(unique_ptr<A> arg)
{
cout << arg->GetVal() << endl;
}
int main(int argc, char* argv[])
{
unique_ptr<A> ptr = unique_ptr<A>(new A(1234));
MyFunc(ptr);
return 0;
}
¿Por qué no puedo pasar una std::unique_ptr
a una función? ¿Seguramente este es el propósito principal del constructo? ¿O el comité de C ++ tenía la intención de que recurriera a punteros de estilo C sin formato y lo pasara así:
MyFunc(&(*ptr));
Y lo más extraño de todo, ¿por qué es una buena forma de pasarlo? Parece horriblemente inconsistente:
MyFunc(unique_ptr<A>(new A(1234)));