기본클래스의 포인터가 파생클래스 객체를 가리키고 있고 이 포인터를 delete할때 가상 소멸자가 없다면 파생클래스의 부분이 소멸되지않습니다 예를들어, 다음과 같이 두 클래스가 있다고 해봅시다 class Base{ public: ~Base() { ... } }; class Derived : public Base{ public: Derived() { ... } ~Derived() { //Derived의 자원을 제거합니다 } }; 이런 클래스에서 Derived* D = new Derived(); delete D; //Derived의 소멸자가 호출되므로 괜찮습니다 Base* B= new Derived(); delete B; //Base의 소멸자만 호출됩니다 Derived의 자원이 없어지지 않습니다!! Base의 포인터가 Derived 객체를 가리킬때 문제는 발생합니다.
객체의 일부가 소멸되지않고 그대로 있는건데 이 문제를 어떻게 해결하냐 그 답이 바로 가상 소멸자에 있습니다 class Ba...
#
Cplusplus
#
가상소멸자
#
프로그래밍
원문 링크 : [C++] 가상 소멸자는 언제 쓰는가