什么合法代码可以触发 C4523“指定多个析构函数”Visual C++ 警告?

问题描述 投票:0回答:3

根据 MSDN,Visual C++ 可以发出 C4523 警告 'class':指定了多个析构函数。这种情况怎么可能?

我尝试了以下方法:

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

这会产生 析构函数必须具有“void”参数列表错误和 C4523 警告以及以下内容

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

这会产生成员函数已经定义或声明错误和以下

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

这会产生 析构函数不能有返回类型错误。

那么我如何得到 C4523 警告而没有错误呢?

c++ visual-c++ destructor compiler-warnings
3个回答
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

2
投票

这是多个析构函数是错误而不是警告的另一个示例:

class C
{
    ~C();
    ~C() volatile;
};

0
投票

大胆猜测:可能是通过多类继承吗? 假设类 C 继承自类 A 和 B,并且 A 和 B 指定了析构函数,但 C 没有。

© www.soinside.com 2019 - 2024. All rights reserved.