Visual C++ 可以发出 C4265 warning当一个类至少有一个虚成员函数并且没有虚析构函数时。
显然,当派生类对象通过指向基类的指针被删除
并且基类中没有虚拟析构函数时,警告会被检测到。这种情况会产生未定义的行为。顺便说一句,我刚刚通过在 Visual C++ 中启用 C4265,在相当庞大的代码库中找到了这种情况的示例。
默认情况下此警告处于关闭状态。
为什么?如果我启用它并向发出警告的每个类添加一个虚拟析构函数,会发生什么情况?
最佳答案
我的猜测是有时您不需要虚析构函数,即使您确实有虚函数(因此考虑从它继承)。
如果您在派生类中分配内存并需要在对象销毁时释放它,则需要一个虚拟析构函数,但情况并非总是如此。
虚拟析构函数还意味着您应该实现复制构造函数和赋值运算符(三规则),如果您的类成员只是 POD 类型,则也不需要这些。
总结一下:即使对于不需要虚拟析构函数的类,您也会收到此警告,那么为什么要有它呢?
关于c++ - 为什么 C4265 Visual C++ 警告(虚拟成员函数和无虚拟析构函数)默认关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8051256/