假设我们有一个名为String的类,它代表一个字符串。该类可以有一个默认的移动赋值运算符,如下所示:
class String {
private:
char* data;
size_t length;
public:
// 构造函数和析构函数等其他成员函数...
// 移动赋值运算符
String& operator=(String&& other) = default;
};
在这个例子中,String& operator=(String&& other) = default;声明了一个默认的移动赋值运算符。这个运算符将允许我们将一个String类的右值(例如一个临时对象或字面值)赋值给一个String类的实例。
当我们执行以下代码时:
String s1 = "Hello";
String s2 = std::move(s1);
默认的移动赋值运算符将被调用,它将把s1的值(即字符串"Hello")移动到s2中,并且s1的状态将被适当地修改(通常是将它的资源释放)。这个运算符通常比复制赋值运算符更高效,因为它避免了不必要的复制操作。