Como posso passar um std::unique_ptr
em uma função? Digamos que eu tenha a seguinte aula:
class A
{
public:
A(int val)
{
_val = val;
}
int GetVal() { return _val; }
private:
int _val;
};
O seguinte não 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 que não posso passar um std::unique_ptr
para uma função? Certamente este é o objetivo principal do construto? Ou o comitê de C ++ pretendia que eu voltasse às dicas de estilo C brutas e as passasse assim:
MyFunc(&(*ptr));
E o mais estranho de tudo, por que essa é uma maneira OK de passar isso? Parece terrivelmente inconsistente:
MyFunc(unique_ptr<A>(new A(1234)));