다음 코드는 여전히 가상 상속의 부재로 인해 부정적인 영향을 받습니까?기본 클래스에 데이터 멤버가 포함되어 있지 않은 경우에도 가상 상속이 필요합니까?
이 경우 부정적인 영향이와 같은 것 (또는 나쁜) class A
이이 데이터 멤버를 포함 않은 경우 가상 상속없이 다중 상속의 부정적인 영향?
class A
{
public :
virtual ~A () { }
virtual int foo () const = 0 ;
} ;
class B : public A
{
public :
virtual ~B () { }
} ;
class C : public A
{
public :
virtual ~C () { }
} ;
class D : public B , public C
{
public :
virtual int foo () const { return 12 ; }
} ;
그것은 [보이는 잘 컴파일 여기에서] (http://coliru.stacked-crooked.com/view?id=8bd2970b897e9b44), 즉 B에서 파생 된 A에 대한 포인터가 C에서 파생 된 것과 같은 값을 가질 것으로 예상되는 경우입니다. – Niall
By A에서 비어있는 구현을 가진 가상 소멸자를 선언해야합니다. http://stackoverflow.com/questions/461203/when-to-use-virtual-destructors – Notinlist
@Notinlist 캐치를 가져 주셔서 감사합니다. 안전을 위해 A, B, C에 가상 소멸자를 추가했습니다. – Giffyguy