如何从基类中调用非虚拟的析构函数?

时间:2014-01-19 08:02:06

标签: c++ destructor virtual-functions virtual-destructor

假设我有一个继承自另一个类的类,并且我创建了一个从基类指向派生类对象的指针。现在,如果基类析构函数被定义为虚拟,那么它就不会产生任何问题。但是,在我的情况下,基类析构函数未声明为虚拟,因此当我删除此指针时,它将导致内存泄漏。

如何在不修改基类代码的情况下克服这个问题?

2 个答案:

答案 0 :(得分:2)

假设你的意思是指的是Base*类型的指针(没有虚拟析构函数),指向类型为Derived的对象,并且你要删除这一点。

处理这种情况的一种简单方法是使用智能指针(如std::shared_ptr)来记住原始(静态已知)对象类型并将其应用于删除。

更一般地说,不要使用显式delete:将其留给智能指针和容器对象。

答案 1 :(得分:1)

您可以将基类转换为派生类并调用delete。