将unique_ptr传输到另一个的有效和/或正确方法是什么?

时间:2013-08-08 18:33:03

标签: c++ unique-ptr

例如

class A
{
public:
    setB(unique_ptr<B> b) {???;}
    setB(unique_ptr<B>& b) {???;}
    setB(unique_ptr<B>&& b) {???;}

private:
    unique_ptr<B> mB;
};

如何将参数内容的所有权转移或移动(不复制)给类成员?

1 个答案:

答案 0 :(得分:4)

第一和第三种选择在std::unique_ptr的特定情况下基本相同,并且优于第二种选择(不允许临时替代)。

第一个和第三个选择是等价的,因为从调用者的角度来看,她需要一个rvalue-reference来构造第一个重载的参数。从概念上讲,可能有std::unique_ptr的额外副本,但我怀疑这会导致二进制文件中的任何实际指令,即使它确实如此,它也只是一个指针复制和设置(2个cpu指令)