Я новичок в перемещении семантики в С++ 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?