Aviso C26443

O destruidor de substituição não deve usar especificadores "override" nem "virtual" explícitos.

Esse aviso foi removido no Visual Studio 16.8 para refletir as alterações do C.128 nas Diretrizes Principais do C++.

Diretrizes Principais do C++

C.128: funções virtuais devem especificar exatamente uma das seguintes opções: virtual, substituição ou final.

O consenso atual sobre as Diretrizes Principais é excluir os destruidores da recomendação "substituir explicitamente".

Observações

  • A regra sinaliza a substituição de destruidores que usam explicitamente especificadores "virtual" ou "override".
  • Os destruidores ainda podem usar o especificador "final" devido à semântica especial que ele tem.
  • Avisos aparecem em definições de função, não em declarações. Isso pode ser confuso, já que definições não têm especificadores virtuais, mas o aviso ainda é apropriado.

Nome da análise de código: NO_EXPLICIT_DTOR_OVERRIDE

Exemplo: "override" explícito

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

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

Confira também

C.128: funções virtuais devem especificar exatamente uma das seguintes opções: virtual, substituição ou final