이 테스트 코드는 struct One
은 가상 멤버가없는 일반 형식이고 struct Two : One
에는 순수 가상 함수 및 가상 소멸자가 있고 다음과 같은 세 가지 형식을 사용합니다. struct Three : Two
은 Two
의 인터페이스를 구현합니다.가상 클래스가 아닌 가상 클래스에서 상속하는 올바른 방법
#include <iostream>
struct One
{
~One() {
std::cout << "~One()\n";
}
};
struct Two : One
{
virtual ~Two() {
std::cout << "~Two()\n";
}
virtual void test() = 0;
};
struct Three : Two
{
virtual ~Three() {
std::cout << "~Three()\n";
}
virtual void test() {
std::cout << "Three::test()\n";
}
};
int main()
{
Two* two = new Three;
two->test();
One* one = two;
delete one;
}
, the output was이 :
세 :: 시험()
~ 한()
모든 소멸자가 가상 만드는 것보다이 다른 문제를 해결하기 위해 어떤 방법이 있나요? 아니면 프로그래머는이 상황에 빠지지 않도록주의해야합니까? 나는 이것을 컴파일 할 때 경고가 없다는 것이 이상하다는 것을 알게된다.
쉬운 수정 : 'One'의 개인 또는 보호 된 상속을 사용하고 선언을 사용하여 기능을 노출하십시오. – Xeo