移动unique_ptr还是使用get()?

std::unique_ptr<Something> p{...};
f(p.get()); // is this better
f(std::move(p)); // or this?

从语义上讲,我知道第一种情况是如果f只是想用它做某事p但不想“拥有”它,而第二种情况则转移pto 的所有权,f以便之后p无用。

但是,这太抽象了,我不确定实践中的一些例子是什么。我可以举一些关于我想使用的get()情况和我想移动的情况的例子吗?

回答

此函数不参与所有权:

int f(Something* p) {
    if (p == nullptr) return 0;
    return 1;
}

它只是使用指针值来做某事。它也可以取消对指针的引用,但它没有删除指向的对象的工作。不参与所有权是通过采用原始指针参数来指示的。

这是一个人为的例子,但这个函数f确实参与了所有权:

struct foo {
   std::unique_ptr<Something> x;       
};

foo f(std::unique_ptr<Something> x){
    return {std::move(x)};
}

它将unique_ptr托管对象的所有权转移给foo返回的对象。Something以前拥有的人不再拥有它。


以上是移动unique_ptr还是使用get()?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>