我有以下问题。我想派生一个派生自Base的类,但不幸的是Base有一个非虚拟析构函数(我不允许触及Base):
class Base{
public:
~Base(); //not virtual, cannot be changed
}
class Derived : public Base{
public:
~Derived();
// more stuff
}
问题在于:
Base* tmp = new Derived();
delete tmp;
将编译,但不会调用正确的析构函数。因此我的问题是:如何防止向基类派生指针的向下转换?这个问题可能还有另一个聪明的解决方案吗?或者是从具有非虚拟析构函数的类派生出来的绝对禁止?