나는 추상적 인 기본 클래스의 여러 레이어와 다소 깊은 객체 지향 코드를 작성하는 시나리오가있어, 각각에 대한 소멸자를 명시 적으로 선언해야하는지 궁금 하네.가상 소멸자의 경우 각 서브 클래스에 가상 소멸자를 명시 적으로 선언해야합니까?
컴파일러가 이미 가상의 기본값을 생성합니까, 아니면 그 사실을 말해야합니까?
나는 추상적 인 기본 클래스의 여러 레이어와 다소 깊은 객체 지향 코드를 작성하는 시나리오가있어, 각각에 대한 소멸자를 명시 적으로 선언해야하는지 궁금 하네.가상 소멸자의 경우 각 서브 클래스에 가상 소멸자를 명시 적으로 선언해야합니까?
컴파일러가 이미 가상의 기본값을 생성합니까, 아니면 그 사실을 말해야합니까?
기본 소멸자는 가상이 아닙니다.하지만 기본 클래스의 소멸자를 가상으로 선언하면 하위 클래스의 소멸자가 재정의되어 명시 적으로 선언되지 않아도 가상이됩니다.
GNU GCC 컴파일러는 클래스 계층 구조가 있고 기본 클래스가 소멸자를 가상으로 선언하지 않을 가능성이 높기 때문에 경고를냅니다.
대답은 '아니오'입니다. 여기서 유일한 관련 요구 사항은 vtable (, 즉, 하나 이상의 가상 함수 포함)이있는 클래스가 상속 체인 어딘가에 하나 이상의 가상 소멸자를 가져야한다는 것입니다. 일반적으로 기본 기본 클래스는 빈 가상 소멸자를 제공합니다.
아래의 주석에서 각 하위 클래스에 대해 소멸자를 _define_해야하는지 여부를 묻습니다. 그리고 대답은 '아니오'입니다. –