多态类的隐式析构函数是否可以成为虚拟的
Could the implicit destructor of a polymorphic class be made virtual?
据我所知,定义一个具有虚拟函数但非虚拟析构函数的类总是一个错误(或者至少是自寻烦恼)。
因此(想想新创造的"零规则"),在我看来,对于任何至少有一个其他虚拟函数的类,隐式生成的析构函数都应该是虚拟的。
将来某个版本的C++标准强制要求这样做是否可行?或者换一种说法,有什么好的理由让多态类中的默认析构函数保持非虚拟的吗?
编辑:为了明确起见,我只是建议如果你不写析构函数会发生什么——如果你写了自己的析构函数,你当然可以一如既往地选择它是否是虚拟的。我只想看到默认情况与常见情况相匹配(不妨碍更高级的使用)。
如果您不想或需要以多态方式删除此类对象,则不需要析构函数是虚拟的。相反,它可以是基类中的非虚拟protected
,只允许以非多态方式删除。要求它自动虚拟化会给不需要多态销毁的应用程序带来不必要的成本。
相关文章:
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- 是否可以使用函数指针调用虚拟析构函数?
- 在没有动态内存的世界中,我是否需要虚拟析构函数?
- 程序永远不会进入虚拟析构函数
- C++ std::vector 中的虚拟析构函数继承
- 哪种方法更适合处理虚拟析构函数?
- 拥有"受保护的非虚拟析构函数"与"受保护虚拟析构构函数"有什么好处
- 带有未解析外部元素的C++虚拟析构函数
- 即使基类和派生类只使用基元数据类型,我是否需要定义虚拟析构函数
- C++切片和虚拟析构函数
- C++虚拟继承、虚拟析构函数和 dynamic_cast<void*>
- 添加虚拟析构函数会使代码大小膨胀
- 应该是虚拟析构函数吗?但是怎么做呢?
- 虚拟析构函数将对象移出 rodata 部分
- 如何将 std::unique_ptr<Parent> 与具有受保护虚拟析构函数的只读父类一起使用
- DIRECTX9 中自定义顶点的虚拟析构函数
- 为什么缺少虚拟析构函数不会导致内存泄漏?
- std::unique_ptr 在虚拟析构函数上重置 SIGABRT
- C++11 中默认纯虚拟析构函数的正确放置
- 在派生类中重写哪个基类的虚拟析构函数