Welke juridische code kan leiden tot C4523 "meerdere destructors gespecificeerde" Visual C ++ waarschuwing?

Volgens MSDN kan Visual C ++ een C4523-waarschuwing 'classeren ': meerdere destructors gespecificeerd . Hoe is zo'n situatie mogelijk?

Ik probeerde het volgende:

class Class {
    ~Class();
    ~Class(int);
};

die een destructor oplevert, moet een 'lege' parameterlijst -fout en C4523-waarschuwing en de volgende

class Class {
    ~Class();
    ~Class();
};

die de ledenfunctie reeds gedefinieerde of gedeclareerde -fout en het volgende oplevert

class Class {
    int ~Class();
    ~Class();
};

die een destructor oplevert, kan geen return-type -fout hebben.

Dus hoe kan ik C4523-waarschuwing en geen foutmelding krijgen?

6
Ik vermoed dat het antwoord "geen" is.
toegevoegd de auteur Billy ONeal, de bron

3 antwoord

De volgende oorzaken waarschuwen C4523 maar het wordt ook voorafgegaan door een fout

struct Foo 
{
  ~Foo() {}
  ~Foo() const {}
};


error C2583: 'Foo::~Foo' : 'const' 'this' pointer is illegal for constructors/destructors
warning C4523: 'Foo' : multiple destructors specified
3
toegevoegd

Hier is nog een voorbeeld van het feit dat meerdere destructors een fout zijn, geen waarschuwing:

class C
{
    ~C();
    ~C() volatile;
};
2
toegevoegd
@MooingDuck: het lijkt veel op de tag const waaraan Praetorian een voorbeeld heeft toegevoegd. Ik overwoog om const te gebruiken omdat er meer mensen bekend mee zijn, maar vond dat er meer een legitieme reden was om een ​​andere destructor te hebben voor een vluchtig -object. Maar de C ++ standaard denkt anders, de volatile modifier is toegestaan ​​op gewone lidfuncties, maar niet op de destructor.
toegevoegd de auteur Ben Voigt, de bron
Ik heb nog nooit een vluchtige functie gezien.
toegevoegd de auteur Mooing Duck, de bron

Een wilde gok: zou het kunnen door meerdere klassenovererving? Stel dat klasse C erft van klasse A en B, en A en B een destructor opgeven, maar C niet.

0
toegevoegd
Dan wordt een standaard destructor gegenereerd - geen reden voor waarschuwing.
toegevoegd de auteur sharptooth, de bron