C26443 NO_EXPLICIT_DTOR_OVERRIDEC26443 NO_EXPLICIT_DTOR_OVERRIDE

« Le destructeur de substitution ne doit pas utiliser explicites 'override' ou 'virtual' spécificateurs. »“Overriding destructor should not use explicit 'override' or 'virtual' specifiers.”

C++ Core Guidelines :C++ Core Guidelines:

C.128 : Les fonctions virtuelles doivent spécifier un seul de virtuel, substitution, ou final.C.128: Virtual functions should specify exactly one of virtual, override, or final.

Les destructeurs sont des fonctions généralement très spécifiques.Destructors are generally very specific functions. Cette règle peut être discutable mais consensus actuel sur les instructions de base est d’exclure les destructeurs de la recommandation de substituer explicitement.This rule may be debatable but current consensus on the Core Guidelines is to exclude destructors from the ‘override explicitly’ recommendation.

NotesNotes

  • La règle indicateurs destructeurs substitution ce explicitement utilisez 'virtual' ou 'override' spécificateurs.The rule flags overriding destructors that explicitly use ‘virtual’ or ‘override’ specifiers.
  • Les destructeurs peuvent toujours utiliser le spécificateur 'final' en raison de sa sémantique spéciale.Destructors can still use the ‘final’ specifier due to its special semantics.
  • Avertissements s’affichent dans les définitions de fonction, pas de déclarations.Warnings show up on function definitions, not declarations. Cela peut prêter à confusion, car les définitions n’ont pas les spécificateurs virtuels, mais l’avertissement est toujours légitimes.This may be confusing since definitions do not have virtual specifiers, but the warning is still legit.

Exemple : Explicites 'override'Example: Explicit ‘override’

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

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

Voir aussiSee Also

C.128 : Les fonctions virtuelles doivent spécifier un seul de virtuel, substitution, ou finalC.128: Virtual functions should specify exactly one of virtual, override, or final