我怎样才能通过std::unique_ptr
变成一个函数?假设我有以下课程:
class A
{
public:
A(int val)
{
_val = val;
}
int GetVal() { return _val; }
private:
int _val;
};
以下内容无法编译:
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;
}
为什么我无法通过std::unique_ptr
变成一个函数?这肯定是该构造的主要目的吗?或者 C++ 委员会是否打算让我退回到原始 C 风格指针并像这样传递它:
MyFunc(&(*ptr));
最奇怪的是,为什么这是一种好的传递方式?这看起来非常不一致:
MyFunc(unique_ptr<A>(new A(1234)));
这里基本上有两个选择:
通过引用传递智能指针
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);
}
将智能指针移动到函数参数中
请注意,在这种情况下,断言将成立!
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(move(ptr));
assert(ptr == nullptr)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)