class Quote{
public:
Quote(const Quote& q) : bookNo(q.bookNo), price(q.price) {}
Quote(Quote&& q) noexcept : bookNo(std::move(q.bookNo)), price(std::move(q.price)) {}
virtual Quote* clone() const & { return new Quote(*this); }
virtual Quote* clone() && {return new Quote(std::move(*this));}
//这里用std::move的用意是什么?是为了显式调用Quote(Quote&& q)这个构造函数吗?我原以为直接virtual Quote* clone() && {return new Quote(*this);}就行了,因为有&&引用限定符,说明*this是右值。我说错没?
private:
std::string bookNo;
protected:
double price = 10.0;
};
尽管virtual Quote* clone() &&的参数本来是右值,但因为*this
这个操作使之变成了左值,所以还需要move()操作将之变为右值
没错. 我特意还去看了一下标准文档, 发现果然有这种写法.
Quote* q = Quote().clone();
这行代码就会调用你那个clone() &&
的重载函数, 因为*this
是一个右值对象.