Какой юридический код может вызвать предупреждение C4523 «указано несколько деструкторов» Visual C ++? - PullRequest
6 голосов
/ 27 октября 2011

Согласно MSDN, Visual C ++ может выдавать C4523 предупреждение 'класс': указано несколько деструкторов .Как такая ситуация вообще возможна?

Я попробовал следующее:

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

, что дает деструктор должен иметь список параметров 'void' error и C4523 warning andследующий

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

, который выдает функцию-член, уже определенную или объявленную error, и следующий

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

, который выдает деструктор, не может иметь возвращаемый тип ошибка.

Так, как у меня есть предупреждение C4523 и нет ошибки?

Ответы [ 3 ]

3 голосов
/ 27 октября 2011

Следующее вызывает предупреждение C4523, но ему также предшествует ошибка

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


error C2583: 'Foo::~Foo' : 'const' 'this' pointer is illegal for constructors/destructors
warning C4523: 'Foo' : multiple destructors specified
2 голосов
/ 27 октября 2011

Вот еще один пример того, как несколько деструкторов являются ошибкой, а не предупреждением:

class C
{
    ~C();
    ~C() volatile;
};
0 голосов
/ 27 октября 2011

Дикая догадка: может ли это быть через наследование нескольких классов? Скажем, если класс C наследует от класса A и B, а A и B указывают деструктор, а C - нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...