공통 기반
Base A가 있고 B, C가 각각 A를 상속한다.
topB와 C가 A를 상속하고 D가 B와 C를 상속하면 A 부분 객체가 두 개 생길 수 있으며, virtual inheritance는 이를 하나로 공유하지만 초기화와 비용 규칙이 달라진다.
Base A가 있고 B, C가 각각 A를 상속한다.
topD가 B와 C를 동시에 상속하면 A 경로가 두 개 생긴다.
diamondD에서 A::x에 접근할 때 B::A인지 C::A인지 모호해진다.
ambiguityB와 C가 virtual로 A를 상속하면 D 안의 A는 하나만 존재한다.
shared base