我对在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?
发布于 2011-11-14 04:06:54
是的,如果您在构造函数中通过值获取unique_ptr
,则必须这样做。显式是一件很好的事情。由于unique_ptr
是不可复制的(私有拷贝函数),你所写的代码应该会给你一个编译器错误。
发布于 2011-11-14 04:08:30
Base(Base::UPtr n):next(std::move(n)) {}
应该会更好,因为
Base(Base::UPtr&& n):next(std::forward<Base::UPtr>(n)) {}
和
void setNext(Base::UPtr n)
应该是
void setNext(Base::UPtr&& n)
同样的身体。
还有..。什么是handle()
中的evt
??
https://stackoverflow.com/questions/8114276
复制相似问题