【发布时间】:2015-10-18 06:52:14
【问题描述】:
根据标准,缺少虚拟析构函数的多态性会导致未定义的行为。实际上,它确实导致在删除父类时没有调用派生类的析构函数。但是,它是否也会导致任何常见编译器/系统中的内存泄漏?我对 Android/Linux 上的 g++ 特别感兴趣。
具体来说,我指的是删除内存派生类是否会以某种方式泄漏。考虑:
class Base {}
class Derived {
int x;
}
如果我将Base* 删除为Derived,会泄漏4 个字节吗?或者内存分配器是否已经知道根据分配要释放多少字节?
【问题讨论】:
-
“缺少虚拟析构函数的多态性会导致未定义的行为。”它不必。仅当您从基指针对派生对象调用
delete时才会出现问题。 -
@CamelToe 不,我没有,但是有一些预先存在的代码,除非确实存在问题,否则我不想修复它。另外,我比什么都好奇。