Search code examples
c++diamond-problem

C++: Diamond concerns


Simple question: Will this hierarchy cause a DP?

//Abstract base class
class A {
    //Implement pure virtual methods with a default definition.
    //Pure virtual methods are still declared pure virtual.
};

//Abstract derived class
class B : public A {
    //Define pure virtual methods with a default definition.
    //Pure virtual methods are still declared pure virtual.
};

//Abstract base class
class C {
    //Define pure virtual methods with a default definition.
    //Pure virtual methods are still declared pure virtual.
};

//Concrete class
class D : public B, public C {
    //Implement all methods from D, B, and C
};

Solution

  • No. Draw the picture; all bases are unique:

    A
    |
    V
    B   C
     \ /
      V
      D
    

    The "diamond problem" only pertains to ambiguous base classes due to multiple repeated bases, e.g. if D were to derive from both A -> B and A -> C:

    No-diamond-problematic:                 Virtually-inherited diamond:
    
            A   A                                         A
            |   |                                       v/ \v
            B   C                                       B   C
             \ /                                         \ /
              V                                           V
              D                                           D