☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

避免异常类多重继承自同一非虚基类

7.18 ID_diamondExceptionInheritance
目录 › next › previous

当异常类有多个基类,这些基类又派生自同一非虚基类时,无法通过该非虚基类捕获异常。

本规则是 ID_diamondInheritance 的特化。

示例:

class A {};
class B: public A {};
class C: public A {};
class D: public B, public C {};  // Non-compliant

int main()
{
    try {
        throw D();
    }
    catch (A&) {  // Cannot catch derived objects
        ....
    }
}

例中基类 A 在派生类 D 中会有多个实例,在这种情况下无法通过基类 A 捕获派生类的对象。

应将 A 设为虚基类:

class A {};
class B: virtual public A {};
class C: virtual public A {};
class D: public B, public C {};  // Compliant

相关

ID_diamondInheritance

依据

ISO/IEC 14882:2003 10.1(4 5 6) ISO/IEC 14882:2011 10.1(4 5 6 7)
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.