Как передать аргумент unique_ptr конструктору или функции?

Я новичок в переносе семантики в C ++ 11 и не очень хорошо знаю, как обрабатывать параметры unique_ptr в конструкторы или функции. Рассмотрим, как этот класс ссылается на себя:

#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 в вызывающем коде?

Base::UPtr b1;
Base::UPtr b2(new Base());

b1->setNext(b2); //should I write b1->setNext(std::move(b2)); instead?
375
задан R. Martinho Fernandes 13 November 2011 в 11:44
поделиться