C++ 语言/间接/右值引用/移动语义
外观
传统上,一个类可以提供“复制构造函数”CRType::CRType(const CRType& x) {...}
和“复制赋值运算符”CRType& CRType::operator=(const CRType& x) {...}
。这些将在多种情况下使用,例如通过CRType oDesti(oSource);
定义oDesti
(其中oSource
已经定义为CRType
对象)。如果CRType
是某种自定义容器,那么这两个函数通常通过深度复制所有包含的项目来实现,这在计算上可能是昂贵的。
在现代软件中,这些由编程“移动构造函数”和“移动赋值运算符”函数补充,这些函数通过仅传递有效负载句柄来实现。函数重载可以区分移动构造函数和复制构造函数,因为移动构造函数参数的类型是“右值引用”CRType&&
。