c++ - 将 unique_ptr 转移到另一个的有效和/或正确的方法是什么?

标签 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;
};

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

最佳答案

std::unique_ptr 的特定情况下,第一个和第三个备选方案基本上是等效的,并且比第二个备选方案(不允许临时变量)更好。

第一个和第三个替代方案是等价的,因为从调用者的角度来看,她需要一个右值引用来构造第一个重载的参数。从概念上讲,可能存在 std::unique_ptr 的额外拷贝,但我怀疑这会导致二进制文件中出现任何真正的指令,即使它确实存在,它也只是一个指针拷贝和设置(2 个 cpu 指令)

关于c++ - 将 unique_ptr 转移到另一个的有效和/或正确的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18133486/

相关文章:

c++ - 使用迭代器从列表中打印结构值

c++ - 为什么我不能使用迭代器将 unique_ptr 从集合 move 到函数参数?

c++ - 为什么 T* 可以在寄存器中传递,但 unique_ptr<T> 却不能?

c++ - 唯一指针的迭代 vector

c++ - 比较自赋值的指针

c++ - 如何在另一个系统上启用文件路径

c++ - 如何将深度图像复制到彩色图像?

c++ - glfwCreateWindow 返回 NULL

c++ - "Downcasting"unique_ptr<Base> 到 unique_ptr<Derived>

c++ - 将 unique_ptr 传递给将其添加到 vector 的函数