Hangi yasal kod C4523 "Birden fazla yıkıcı belirtildi" Visual C ++ uyarısı tetikleyebilir?

MSDN'ye göre, Visual C ++, C4523 uyarısı sınıfı yayınlayabilir ': belirtilen birden fazla yıkıcı . Böyle bir durum nasıl mümkün olabilir?

Aşağıdakileri denedim:

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

bir yıkıcı bir 'geçersiz' parametre listesine sahip olmalıdır hatası ve C4523 uyarısı ve aşağıdakileri içerir

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

üye işlevi zaten tanımlanmış veya bildirilmiş hatası veren ve aşağıdakileri içeren

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

Bu, bir yıkıcı bir dönüş türü hatası vermez.

Peki nasıl C4523 uyarısı ve hatası var?

6
Cevabın "yok" olduğundan şüpheleniyorum.
katma yazar Billy ONeal, kaynak

3 cevap

Aşağıdaki uyarı C4523'e neden olur, ancak bir hatadan da önce gelir.

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


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

İşte bir hata olan çoklu yıkıcıların bir örneği, bir uyarı değil:

class C
{
    ~C();
    ~C() volatile;
};
2
katma
@MooingDuck: Praetorian'un bir örnek eklediği const etiketine çok benziyor. const kullanmayı düşündüm çünkü daha fazla kişi buna aşinaydı, ancak volatile nesnesi için farklı bir yıkıcıya sahip olmak için daha fazla meşru sebep olduğunu hissettim. Ancak C ++ standardı farklı düşünür, volatile değiştiricisine, sıradan üye işlevlerinde izin verilir, ancak yıkıcıya izin verilmez.
katma yazar Ben Voigt, kaynak
Daha önce hiç bir uçucu fonksiyon görmemiştim.
katma yazar Mooing Duck, kaynak

Vahşi bir tahmin: birden fazla sınıf kalıtım yoluyla olabilir mi? Sınıf C'nin hem A sınıfı hem de B sınıfından miras aldığını ve A ve B'nin bir yıkıcıyı belirtip belirtmediğini belirtin.

0
katma
Sonra bir varsayılan yıkıcı üretilecek - uyarı için bir sebep yok.
katma yazar sharptooth, kaynak