2014-01-19 99 views
1

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

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

+0

显示更多的代码。特别是,显示破坏数据的代码(不清楚它是否是你的)。 –

+0

你可以尝试使用组合而不是继承。 – soon

回答

2

假设你的意思是你有Base*类型的指针(不具有虚析构函数),指向Derived类型的反对,并要删除该

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

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

1

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

相关问题