C26432 DEFINE_OR_DELETE_SPECIAL_OPSC26432 DEFINE_OR_DELETE_SPECIAL_OPS

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

C++ Core Guidelines: C.21: si se 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

Se supone que las operaciones especiales como constructores para modificar el comportamiento de tipos para que más confían en los mecanismos del lenguaje para aplicar automáticamente los escenarios concretos (el ejemplo canónico es la administración de recursos).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 eliminados (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 desde el mismo grupo que no se especifica (es decir, implícitamente definidas por compilador).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 copia;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, no pasa nada por mezclar eliminada y definen explícitamente establecidas como valor predeterminado de las operaciones con, pero todas ellas 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.
    • Los niveles de acceso no son importantes y también se pueden combinar.Access levels are not important and can also be mixed.
    • La advertencia marcas de la primera definición de función no estáticos de un tipo, una vez por tipo.The warning flags the first non-static function definition of a type, once per type.