c++ - 为什么 C4265 Visual C++ 警告(虚拟成员函数和无虚拟析构函数)默认关闭?

标签 c++ visual-c++ compiler-construction destructor compiler-warnings

Visual C++ 可以发出 C4265 warning当一个类至少有一个虚成员函数并且没有虚析构函数时。

显然,当派生类对象通过指向基类的指针被删除并且基类中没有虚拟析构函数时,警告会被检测到。这种情况会产生未定义的行为。顺便说一句,我刚刚通过在 Visual C++ 中启用 C4265,在相当庞大的代码库中找到了这种情况的示例。

默认情况下此警告处于关闭状态。

为什么?如果我启用它并向发出警告的每个类添加一个虚拟析构函数,会发生什么情况?

最佳答案

我的猜测是有时您不需要虚析构函数,即使您确实有虚函数(因此考虑从它继承)。

如果您在派生类中分配内存并需要在对象销毁时释放它,则需要一个虚拟析构函数,但情况并非总是如此。

虚拟析构函数还意味着您应该实现复制构造函数和赋值运算符(三规则),如果您的类成员只是 POD 类型,则也不需要这些。

总结一下:即使对于不需要虚拟析构函数的类,您也会收到此警告,那么为什么要有它呢?

关于c++ - 为什么 C4265 Visual C++ 警告(虚拟成员函数和无虚拟析构函数)默认关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8051256/

相关文章:

tree - 使用翻译方案进行 7-2+3 的后期修复表示法的可能树

java - 使用 EBNF 表达式解析代码块

c++ - 使用 boost::deadline_timer 延迟操作

c++ - 包含另一个 vector 的部分子集的 vector 都指向同一内存

c++ - 为我的应用程序搜索框架

c++ - 在 C++ 中读取 CSV 文件中的两列

c++用移动而不是复制来累积

c++ - std::shared_ptr 为空但不为 null

c - 为什么这个 C 代码没有生成预期的输出?

c++ - Rcpp第一次编译遇到问题