C ++ Primer 5th notes (capítulo 13 control de copia) operación móvil sintética

1. Condiciones de apariencia

Solo cuando una clase no define ningún miembro de control de copia de su propia versión, y cada miembro de datos no estáticos de la clase se puede mover, el compilador sintetizará un constructor o un operador de asignación de movimiento para él.

struc X{
    
    
  int i;
  std::string s;
};

struc HasX{
    
    
  X mem;
};

X x, x2 = std::move(x);
HasX hx, hx2 = std::move(hx);

2. Descripción

Si un miembro de la clase es un tipo de clase y la clase tiene una operación de movimiento correspondiente, el compilador también puede mover este miembro.

3. Condiciones que no aparecen

Si una clase solo tiene un constructor de copia, pero no un constructor de movimiento, en este caso, el compilador no sintetizará el constructor de movimiento y las reglas de coincidencia de la función garantizarán que los objetos de este tipo se copien.

class Foo{
    
    
public:
    Foo() = default;
    Foo(const Foo &) ;//拷贝构造函数
    //其他成员的定义,但Foo为定义移动构造函数
};

Foo x;
Foo y(x);//拷贝构造函数x是一个左值
Foo z(std::move(x));//拷贝构造函数,因为未定义移动构造函数

Supongo que te gusta

Origin blog.csdn.net/thefist11cc/article/details/113876089
Recomendado
Clasificación