C26432 DEFINE_OR_DELETE_SPECIAL_OPSC26432 DEFINE_OR_DELETE_SPECIAL_OPS

"Si define o eliminar cualquier operación de forma predeterminada en el tipo, definir o eliminarlas todas"."If you define or delete any default operation in the type, define or delete them all."

Directrices de núcleo de C++: C.21: si define o = eliminar cualquier operación de forma predeterminada, definir o = elimínelos todosC++ Core Guidelines: C.21: If you define or =delete any default operation, define or =delete them all

Operaciones especiales como los constructores se supone que para modificar el comportamiento de tipos para que más confían en los mecanismos del lenguaje para aplicar de forma automática (el ejemplo canónico es la administración de recursos) de escenarios concretos.Special operations like constructors are assumed to alter behavior of types so that they rely more on language mechanisms to automatically enforce specific scenarios (the canonical example is resource management). Si cualquiera de estas operaciones se define explícitamente, su valor predeterminado o eliminado (como un valor que indica que el usuario desea evitar ningún control especial de un tipo) sería incoherente para dejar las demás operaciones del mismo grupo no se especifica (por ejemplo, implícitamente definidas por compilador de).If any of these operations is explicitly defined, defaulted or deleted (as an indication that user wants to avoid any special handling of a type) it would be inconsistent to leave the other operations from the same group unspecified (i.e. implicitly defined by compiler).

ComentariosRemarks

  • Esta comprobación implementa "la regla de cinco" que se trata de las siguientes operaciones como especial:This check implements "the rule of five" which treats the following operations as special:
    • constructores de copias;copy constructors;
    • mover constructores;move constructors;
    • operadores de asignación de copia;copy assignment operators;
    • mover los operadores de asignación;move assignment operators;
    • destructores;destructors;
    • La regla no comprueba si las operaciones se definen en la misma manera, es decir, es correcto mezclar eliminada y definen explícitamente establecidos como predeterminadas operaciones con, pero todos ellos se deben especificar algún modo si cualquiera de ellos aparece.The rule doesn’t check if operations are defined in the same way, i.e. it is okay to mix deleted and defaulted operations with explicitly defined, but they all must be specified somehow if any of them appears.
    • Niveles de acceso no son importantes y también se pueden combinar.Access levels are not important and can also be mixed.
    • La advertencia marca la primera definición de método no estático de un tipo, una vez por tipo.The warning flags the first non-static method definition of a type, once per type.