有效C ++中的Scott Meyers说-
如果一个类具有任何虚函数,则它应该具有一个虚拟析构函数,并且那些并非设计为基类或未设计为多态使用的类不应声明虚拟析构函数。
因此,您应在多态基类中声明虚拟的析构函数。这是因为如果您使用派生的构造函数创建基类的对象-
Base *b = new Derived(); //使用b- delete b;
如果Base的析构函数不是虚拟的,则在这种情况下delete b具有未定义的行为。对析构函数的调用将像任何非虚拟代码一样被解析。因此,将调用基类的析构函数,但不会调用派生类的析构函数,这将导致资源泄漏。