【发布时间】:2011-09-30 22:24:36
【问题描述】:
为什么 C++ 默认情况下不让析构函数为虚拟对于至少有一个其他虚函数的类?在这种情况下,添加一个虚拟析构函数不会花费我任何成本,而没有一个是(几乎? ) 总是一个错误。 C++0x 会解决这个问题吗?
【问题讨论】:
-
关键字是
almost。如果您的基础具有虚拟功能并且您不想为虚拟析构函数付费,那么您如何在这个新世界中指定它不是虚拟的。所有旧代码也会发生什么?我们需要一个计划来处理向后兼容性问题。 -
虚拟析构函数是有代价的,因为它需要另一个析构函数代码副本,用于所有派生类。见this question。
-
@Simon,不过,D0 变体可以实现为 D1 的包装器。
-
不可能重复,我明白为什么并非所有函数默认都是虚拟的。我的问题是,为什么 C++ 在您声明另一个函数为虚拟时,默认情况下不将析构函数设为虚拟。