首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将unique_ptr参数传递给构造函数或函数?

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

Stack Overflow用户
提问于 2011-11-14 03:58:49
回答 2查看 210.2K关注 0票数 453

我对在C++11中移动语义是个新手,我也不太清楚如何在构造函数或函数中处理unique_ptr参数。考虑一下引用自身的类:

代码语言:javascript
复制
#include <memory>

class Base
{
  public:

    typedef unique_ptr<Base> UPtr;

    Base(){}
    Base(Base::UPtr n):next(std::move(n)){}

    virtual ~Base(){}

    void setNext(Base::UPtr n)
    {
      next = std::move(n);
    }

  protected :

    Base::UPtr next;

};

这是我应该如何编写接受unique_ptr参数的函数吗?

我需要在调用代码中使用std::move吗?

代码语言:javascript
复制
Base::UPtr b1;
Base::UPtr b2(new Base());

b1->setNext(b2); //should I write b1->setNext(std::move(b2)); instead?
EN

回答 2

Stack Overflow用户

发布于 2011-11-14 04:06:54

是的,如果您在构造函数中通过值获取unique_ptr,则必须这样做。显式是一件很好的事情。由于unique_ptr是不可复制的(私有拷贝函数),你所写的代码应该会给你一个编译器错误。

票数 4
EN

Stack Overflow用户

发布于 2011-11-14 04:08:30

代码语言:javascript
复制
Base(Base::UPtr n):next(std::move(n)) {}

应该会更好,因为

代码语言:javascript
复制
Base(Base::UPtr&& n):next(std::forward<Base::UPtr>(n)) {}

代码语言:javascript
复制
void setNext(Base::UPtr n)

应该是

代码语言:javascript
复制
void setNext(Base::UPtr&& n)

同样的身体。

还有..。什么是handle()中的evt ??

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

https://stackoverflow.com/questions/8114276

复制
相关文章

相似问题

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