int main ()
{
First* drv1 = new Third();
delete drv1;
}
만약 위와 같은 상황이 있다면 Base의 소멸자가 실행된다.
그러면 Derived에 정의된 ~Derived가 호출되지 않아 메모리해제가 실행되지 않을 수도 있다.
따라서 객체에서 동적할당을 했다면 소멸자를 virtual키워드를 이용해 가상소멸자로 만들어줘야 한다.
가상소멸자를 이용하면 소멸자가 호출될때 ~First에서 ~Third로 소멸자호출이 바뀌고 유도클래스의 소멸자 호출 후 기초클래스의 소멸자가 호출된다.
기초클래스의 참조자로 유도클래스 객체 참조가 가능하다.
int main()
{
Third third;
Second& sec = third;
First& fir = sec;
}