Якой прававой кодэкс можа справакаваць C4523 «некалькі деструкторов пазначаны» папярэджанне Visual C ++?

Згодна з MSDN, Visual C ++ можа выпускаць клас папярэджанне C4523 ' ': некалькі деструкторов, названыя . Як такая сітуацыя ўвогуле магчыма?

Я паспрабаваў наступныя:

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

што дае деструктор павінен мець Пустэчу спіс параметраў памылка і C4523 папярэджання і наступнае

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

што дае функцыя-член ужо вызначаны або абвешчаныя памылка і наступны

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

што дае деструктор не можа мець тып якое вяртаецца значэння памылка.

Так як у мяне ёсць папярэджанне C4523 і ніякай памылкі?

6
Я падазраю, што адказ не з'яўляецца «ні адзін».
дададзена аўтар Billy ONeal, крыніца

3 адказы

Наступныя прычыны папярэджання C4523, але яна таксама папярэднічае памылцы

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


error C2583: 'Foo::~Foo' : 'const' 'this' pointer is illegal for constructors/destructors
warning C4523: 'Foo' : multiple destructors specified
3
дададзена

Вось яшчэ адзін прыклад з мноства деструкторов будучы памылку, а не папярэджанне:

class C
{
    ~C();
    ~C() volatile;
};
2
дададзена
@MooingDuck: Гэта так жа, як сопзЬ тэг, які Praetorian дададзены прыклад. Я разглядаў канстантнасцю , таму што больш людзей знаёмыя з ім, але адчуваў, што больш законных падстаў, каб мець розны деструктор для лятучы аб'екта. Але стандарт C ++ думае па-іншаму, то лятучы Мадыфікатар дапускаецца на звычайных функцый-членаў, але не деструктор.
дададзена аўтар Ben Voigt, крыніца
Я ніколі не бачыў лятучую функцыю раней.
дададзена аўтар Mooing Duck, крыніца

Грубае здагадка: гэта можа быць праз ўспадкоўванне множнага класа? Скажам, калі клас C спадчыну ад абодвух класаў А і В, а таксама А і В вызначыць деструктор, але C ня робіць.

0
дададзена
Затым деструктор па змаўчанні будзе генеравацца - няма падстаў для папярэджання.
дададзена аўтар sharptooth, крыніца