例如
class A
{
public:
setB(unique_ptr<B> b) {???;}
setB(unique_ptr<B>& b) {???;}
setB(unique_ptr<B>&& b) {???;}
private:
unique_ptr<B> mB;
};
如何将参数内容的所有权转移或移动(不复制)给类成员?
答案 0 :(得分:4)
第一和第三种选择在std::unique_ptr
的特定情况下基本相同,并且优于第二种选择(不允许临时替代)。
第一个和第三个选择是等价的,因为从调用者的角度来看,她需要一个rvalue-reference来构造第一个重载的参数。从概念上讲,可能有std::unique_ptr
的额外副本,但我怀疑这会导致二进制文件中的任何实际指令,即使它确实如此,它也只是一个指针复制和设置(2个cpu指令)