假设我有一个继承自另一个类的类,并且我创建了一个从基类指向派生类对象的指针。现在,如果基类析构函数被定义为虚拟,那么它就不会产生任何问题。但是,在我的情况下,基类析构函数未声明为虚拟,因此当我删除此指针时,它将导致内存泄漏。
如何在不修改基类代码的情况下克服这个问题?
答案 0 :(得分:2)
假设你的意思是指的是Base*
类型的指针(没有虚拟析构函数),指向类型为Derived
的对象,并且你要删除这一点。
处理这种情况的一种简单方法是使用智能指针(如std::shared_ptr
)来记住原始(静态已知)对象类型并将其应用于删除。
更一般地说,不要使用显式delete
:将其留给智能指针和容器对象。
答案 1 :(得分:1)
您可以将基类转换为派生类并调用delete。