Compartir vía


Advertencia C26443

La invalidación del destructor no debe usar especificadores "override" o "virtual" explícitos.

Esta advertencia se quitó en Visual Studio 16.8 para reflejar los cambios en la advertencia C.128 en C++ Core Guidelines.

C++ Core Guidelines

C.128: Las funciones virtuales deben especificar exactamente uno de los valores siguientes: "virtual", "override" o "final".

El consenso actual sobre Core Guidelines es excluir los destructores de la recomendación "invalidar explícitamente".

Notas

  • Las marcas de regla reemplazan los destructores que usan explícitamente especificadores "virtual" u "override".
  • Los destructores todavía pueden usar el especificador "final" debido a su semántica especial.
  • Las advertencias se muestran en las definiciones de función, no en las declaraciones. Esto puede resultar confuso, ya que las definiciones no tienen especificadores virtuales, pero la advertencia sigue siendo adecuada.

Nombre del análisis de código: NO_EXPLICIT_DTOR_OVERRIDE

Ejemplo: Valor "override" explícito

class Transaction {
public:
    virtual ~Transaction();
    // ...
};

class DistributedTransaction : public Transaction {
public:
    ~DistributedTransaction() override { // C26443
        // ...
    }
};

Consulte también

C.128: Las funciones virtuales deben especificar exactamente uno de los valores siguientes: "virtual", "override" o "final"