首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >没有移动的unique_ptr,为什么这是工作的?

没有移动的unique_ptr,为什么这是工作的?
EN

Stack Overflow用户
提问于 2018-05-28 20:00:56
回答 2查看 237关注 0票数 1

示例:

代码语言:javascript
复制
   std::unique_ptr<X> fun(std::unique_ptr<X> p) {
     // Do something with the unique_ptr p
     return p;
   }

在其他地方,我发现了以下调用:

代码语言:javascript
复制
void someFunction() {
  auto p = std::make_unique<X>();
  //...
  fun(std::move(p));
  // Do something else
  fun(std::move(p));
  //...
}

所以我想知道这段代码是否正常,或者只是碰巧它执行了。

编辑:完成示例

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-28 20:23:23

在此片段中:

代码语言:javascript
复制
fun(std::move(p));
fun(std::move(p));

p是移出的,这会使其为空。所以当你第二次调用fun()时,它会收到一个空指针。这很好,只要不取消引用该指针即可。

票数 2
EN

Stack Overflow用户

发布于 2018-05-28 20:43:00

在我看来,其意图是像这样调用fun

代码语言:javascript
复制
p = fun(std::move(p));
p = fun(std::move(p));

在这种情况下,p的所有权将在函数之间来回传递。我更喜欢让fun成为一个空函数,并通过引用传递p,甚至作为原始的X*类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50565966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档