移动语义
移动语义是一种在 C++中将一个对象移动到另一个对象的方法。为此,我们清空旧对象并将其中的所有内容放在新对象中。
为此,我们必须了解右值引用是什么。右值引用(T&&
,其中 T 是对象类型)与普通引用(T&
,现在称为左值引用)没有太大区别。但它们充当两种不同的类型,因此,我们可以创建采用一种类型或另一种类型的构造函数或函数,这在处理移动语义时是必需的。
我们需要两种不同类型的原因是指定两种不同的行为。左值引用构造函数与复制有关,而右值引用构造函数与移动有关。
要移动对象,我们将使用 std::move(obj)
。此函数返回对象的右值引用,以便我们可以将该对象的数据窃取到新对象中。有几种方法可以实现,下面将对此进行讨论。
需要注意的是,使用 std::move
只会创建一个右值参考。换句话说,语句 std::move(obj)
不会改变 obj 的内容,而 auto obj2 = std::move(obj)
(可能)会改变。