Effective C++의 Scott Meyers는 다음과 같이 말합니다.
클래스에 가상 기능이 있는 경우 가상 소멸자가 있어야 하며 기본 클래스로 설계되지 않았거나 다형성으로 사용하도록 설계되지 않은 클래스는 가상 소멸자를 선언해서는 안 됩니다.
따라서 다형성 기본 클래스에서 소멸자를 가상으로 선언해야 합니다. 파생 생성자를 사용하여 기본 클래스의 개체를 생성하는 경우 -
Base *b = new Derived(); // use b delete b;
Base의 소멸자가 가상이 아닌 경우 이 경우 delete b는 정의되지 않은 동작을 합니다. 소멸자에 대한 호출은 비가상 코드처럼 해결됩니다. 따라서 기본 클래스의 소멸자가 호출되지만 파생 클래스의 소멸자는 호출되지 않으므로 리소스 누수가 발생합니다.