成员函数右值引用限定符与std::move

C++语言 码拜 9年前 (2015-11-25) 1285次浏览
书上例子是这样的:

virtual Quote* clone() && {return new Quote(std::move(*this));}

本人想问的是:
既然有了&&限定符,说明*this本身就是右值,为何还要std::move(*this)呢?直接return new Quote(*this);不就行了嘛?莫非是为了让人一目了然?
哦对了,书上前面说智能指针比指针好,那么这里为什么不用智能指针呢?

virtual shared_ptr<Quote> clone() const & { return make_shared<Quote>(*this); }
解决方案:7分
虽然加了 && 限定符,但是 this 的类型依然是 Quote * 。不存在指向引用的指针。
*this 的类型是 Quote 。而不是任何一种引用。
解决方案:7分
你*this类型不是&&啊,不加会调用拷贝构造函数而不是移动
智能指针用于动态分配内存的指针,不用本人去释放内存
解决方案:6分
*this 是左值

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明成员函数右值引用限定符与std::move
喜欢 (0)
[1034331897@qq.com]
分享 (0)