初学者的问题:
Class Quote {
public:
/* ..... */
virtual Quote* clone() const & {return new Quote(*this);}
virtual Quote* clone() && {return new Quote(std::move(*this));} // (***)
/* ..... */
}
由new分配的对象在 free-store 中。*这是调用clone()的任何对象,不一定是动态分配的对象。
如果移动对象和移动对象位于不同的内存区域,移动机制如何工作?或者也许他们从来没有真正在不同的领域,我错过了什么?
据我了解,移动构造函数创建了新的开销,这些开销链接到被移动对象的数据/内存部分。数据本身不会移动/更改。在上述情况下这是如何工作的?如果它以相同的方式工作,那么在新运行之后,我们不会有一个动态分配的对象位于自由存储之外(无论*它位于何处?)这是否由std::move()以某种方式解决?我不完全确定std::move()如何/为什么工作,除了它强制返回对命名对象的右值引用,从而可以从该对象移动。