我试图传递一个指向setter的唯一指针,编译器在“x = newval;”上抱怨说=运算符已被删除。当调用std :: move(newval)时,它工作正常。但在我看来,newval应该已经是一个右值引用类型。怎么回事?
class A {
public:
A(int* i) : x(i) {}
std::unique_ptr<int> x;
void set_ptr(std::unique_ptr<int>&& newval) { x = newval; }
};
为什么编译器认为newval不是右值引用类型?
奖金问题:通过值传递unique_ptr以便移动构建副本会更好吗?
谢谢!