假设我有一个继承自另一个类的类,并且我创建了一个从基类指向派生类对象的指针。现在,如果基类析构函数被定义为虚拟的,那么它不会产生任何问题。但是,在我的情况下,基类析构函数没有声明为虚拟的,所以当我删除这个指针时,它会导致内存泄漏。如何从基类中调用非虚拟的析构函数?
如何在不修改基类代码的情况下克服这个问题?
假设我有一个继承自另一个类的类,并且我创建了一个从基类指向派生类对象的指针。现在,如果基类析构函数被定义为虚拟的,那么它不会产生任何问题。但是,在我的情况下,基类析构函数没有声明为虚拟的,所以当我删除这个指针时,它会导致内存泄漏。如何从基类中调用非虚拟的析构函数?
如何在不修改基类代码的情况下克服这个问题?
假设你的意思是你有Base*
类型的指针(不具有虚析构函数),指向Derived
类型的反对,并要删除该。
处理这种情况的一种简单方法是使用智能指针,例如std::shared_ptr
,它记住原始(静态已知)对象类型并将其应用于删除。
更一般地,不要使用明确的delete
:将其留给智能指针和容器对象。
您可以将基类强制转换为派生并调用delete。
显示更多的代码。特别是,显示破坏数据的代码(不清楚它是否是你的)。 –
你可以尝试使用组合而不是继承。 – soon