Làm cách nào để chuyển std::unique_ptr
một hàm vào một hàm? Giả sử tôi có lớp sau:
class A
{
public:
A(int val)
{
_val = val;
}
int GetVal() { return _val; }
private:
int _val;
};
Sau đây không biên dịch:
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;
}
Tại sao tôi không thể truyền a std::unique_ptr
vào một hàm? Chắc chắn đây là mục đích chính của cấu trúc? Hay ủy ban C ++ có ý định cho tôi quay lại con trỏ kiểu C thô và chuyển nó như thế này:
MyFunc(&(*ptr));
Và kỳ lạ nhất, tại sao đây lại là một cách tốt để vượt qua nó? Nó có vẻ không nhất quán kinh khủng:
MyFunc(unique_ptr<A>(new A(1234)));