我是新手在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;
};
Run Code Online (Sandbox Code Playgroud)
这是我应该如何编写unique_ptr参数的函数?
我需要std::move在调用代码中使用吗?
Base::UPtr b1;
Base::UPtr b2(new Base());
b1->setNext(b2); //should I write b1->setNext(std::move(b2)); instead?
Run Code Online (Sandbox Code Playgroud) 似乎由于某种原因,当我尝试在同一行调用两个函数时,第一个函数从“.get()”接收 nullptr 作为第一个参数
getSomePtr(someUniquePtr.get(), someArray)->moveUniquePtr(std::move(someUniquePtr));
Run Code Online (Sandbox Code Playgroud)
但是,当将这些函数分成两行时,一切似乎都有效:
auto* somePtr = getSomePtr(someUniquePtr.get(), someArray);
somePtr->moveUniquePtr(std::move(someUniquePtr));
Run Code Online (Sandbox Code Playgroud)
为什么会出现这种情况?