C ++ principios básicos c.80: Si desea utilizar la semántica por defecto clara, el uso por defecto =

C.80: Uso = por defecto si tienen que ser explícitos sobre el uso de la semántica por defecto

C.80: Si desea utilizar la semántica por defecto clara, el uso por defecto =

 

La razón (razón)

El compilador es más probable conseguir la semántica por defecto a la derecha y no se puede aplicar mejor que el compilador de estas funciones.

El compilador es más probable que manejar correctamente la semántica de función por defecto, no se puede hacer mejor que el compilador.

 

 

Ejemplo (Ejemplo)

class Tracer {
    string message;
public:
    Tracer(const string& m) : message{m} { cerr << "entering " << message << '\n'; }
    ~Tracer() { cerr << "exiting " << message << '\n'; }

    Tracer(const Tracer&) = default;
    Tracer& operator=(const Tracer&) = default;
    Tracer(Tracer&&) = default;
    Tracer& operator=(Tracer&&) = default;
};

Debido a que hemos definido el destructor, hay que definir las operaciones de copiar y mover. El = por defecto es la mejor y más sencilla manera de hacer eso.

Tal como se define destructor, hay que definir las operaciones de copiar y mover. Uso = por defecto es la mejor y más sencilla manera de lograr el mismo efecto.

 

 

Ejemplo, malo (muestra negativa)

class Tracer2 {
    string message;
public:
    Tracer2(const string& m) : message{m} { cerr << "entering " << message << '\n'; }
    ~Tracer2() { cerr << "exiting " << message << '\n'; }

    Tracer2(const Tracer2& a) : message{a.message} {}
    Tracer2& operator=(const Tracer2& a) { message = a.message; return *this; }
    Tracer2(Tracer2&& a) :message{a.message} {}
    Tracer2& operator=(Tracer2&& a) { message = a.message; return *this; }
};

Escribir los cuerpos de las operaciones de copiar y mover es prolijo, tedioso y propenso a errores. Un compilador lo hace mejor.

Realización práctica de las operaciones de copiar y trasladar el trabajo largo, tedioso y propenso a errores. El compilador hará mejor.

 

 

Cumplimiento (Sugerencias)

(Moderado) El cuerpo de una operación especial no debe tener la misma accesibilidad y semántica que la versión generado por el compilador, porque eso sería redundante

(Medio) para lograr la misma versión de la accesibilidad semántica generado por el compilador y funciones especiales son el trabajo redundante.

 


 

Creo que este artículo útil? pulgares de bienvenida ya compartir con más personas.

Leer artículos más actualizados, por favor preste atención a las micro-canal número público de pensamiento orientado a objetos []

Publicados 408 artículos originales · ganado elogios 653 · vistas 290 000 +

Supongo que te gusta

Origin blog.csdn.net/craftsman1970/article/details/104802529
Recomendado
Clasificación