将std :: unique_ptr传递给构造函数以获取所有权

基思

我想将a传递std::unique_ptr给一个类的构造函数,该类将获取拥有的数据的所有权std::unique_ptr

在编译器处理它们的方式方面foobar下面的方法下面的方法是否有任何区别,从而使其中一种更可取?

foo 类:

template <class T>
class foo
{
    std::unique_ptr<T> data_;

public:
    foo(std::unique_ptr<T>&& data) :
        data_{ std::forward<std::unique_ptr<T>>(data) }
    {
    }
};

bar 类:

template <class T>
class bar
{
    std::unique_ptr<T> data_;

public:
    bar(std::unique_ptr<T> data) :
        data_{ std::move(data) }
    {
    }
};
克瑞克SB

绑定到引用只需少走一走:

void f(std::unique_ptr<T>&& p) { g(std::move(p)); }

f(std::make_unique<T>());  // no move, g binds directly to the temporary

绑定到对象参数需要一个实际步骤:

void f(std::unique_ptr<T> p) { g(std::move(p)); }

f(std::make_unique<T>());  // p constructed (= moved) from temporary,
                           // g binds to p

额外的操作涉及一个指针副本,一个将指针设置为null以及一个带有条件检查的析构函数。这并不是很大的代价,使用哪种样式的问题取决于您编写的代码类型:

您的代码叶子越多,使用的代码就越少,带有按值传递的简单版本越能使您变得简单。相反,您的代码库越多,对用户的了解就越少,无论施加多小的开销,其所带来的价值都不会增加。

你决定。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何取得std :: unique_ptr和std :: shared_ptr的所有权

将std :: vector <std :: unique_ptr <int>>的所有权转移到正在构造的类的正确方法

std :: unique_ptr转移const对象的所有权

取得所有权之前先进行std :: unique_ptr测试

如何正确地将所有权从原始指针移到std :: unique_ptr?

是否可以将所有权从void *转移到unique_ptr?

将原始指针的所有权转移到unique_ptr

如何在使用基于范围的 for 循环遍历 std::unique_ptr 的 std::vector 时获取对象的所有权?

C ++ 11-将引用作为所有权的构造函数参数传递

复制构造函数以转移unique_ptr的所有权

将所有权从std :: vector转移到std :: shared_ptr

如何将std :: unique_ptr传递给函数

将所有权移至std :: io :: Chain

如何将包含 std::unique_ptr 的 std::optional 结构传递给函数?

将std :: unique_ptr传递给类时出错

如何将unique_ptr参数传递给构造函数或函数?

唯一的ptr将所有权移至包含对象的方法

使用已使用 new X() 创建的变量将 std::unique_ptr 传递给函数

unique_ptr所有权疯狂

Pybind11:在构造时将类所有权转移到C ++

std :: locale取得所有权

将仓库所有权转移给组织

将unique_ptr <Derived>&传递给接受unique_ptr <Base>&的函数

std :: unique_ptr constexpr构造函数

std :: unique_ptr构造函数的行为

在不传递所有权的情况下传递unique_ptr <T>的C ++向量

在不获取所有权的情况下访问vector <unique_ptr <T >>中的对象T

我是否可以使unique_ptr不获取其指向对象的所有权?

将变量的所有权转让给函数后,为什么仍可以使用变量?