Udostępnij za pośrednictwem


Ostrzeżenie C26443

Zastępowanie destruktora nie powinno używać jawnych specyfikatorów "przesłonięcia" ani "wirtualnego".

To ostrzeżenie zostało usunięte w programie Visual Studio 16.8, aby odzwierciedlić zmiany w języku C.128 w podstawowych wytycznych dotyczących języka C++.

Podstawowe wytyczne dotyczące języka C++

C.128: Funkcje wirtualne powinny określać dokładnie jedną z wirtualnych, przesłonięć lub finalnych.

Obecny konsensus w sprawie podstawowych wytycznych polega na wykluczeniu destruktorów z zalecenia "jawnie przesłonięć".

Uwagi

  • Flagi reguły zastępują destruktory, które jawnie używają specyfikatorów "virtual" lub "override".
  • Destruktory mogą nadal używać specyfikatora "final" ze względu na jego specjalną semantyka.
  • Ostrzeżenia są wyświetlane w definicjach funkcji, a nie w deklaracjach. Może to być mylące, ponieważ definicje nie mają specyfikatorów wirtualnych, ale ostrzeżenie jest nadal odpowiednie.

Nazwa analizy kodu: NO_EXPLICIT_DTOR_OVERRIDE

Przykład: jawne "przesłonięcia"

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

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

Zobacz też

C.128: Funkcje wirtualne powinny określać dokładnie jedną z wirtualnych, przesłonięć lub finalnych