无效的虚拟析构函数
virtual ~ClassName() {}
从C ++ 11开始we can alternatively say:
virtual ~ClassName() = default;
这两者有什么区别吗?
答案 0 :(得分:4)
主要区别在于默认函数的规则指定了它们被删除的情况(参见ISO c ++ 14(N4296
)8.4,12.1,12.4,12.8)
8.4.2.5:显式默认函数和隐式声明的函数统称为默认函数, 实施应为它们提供隐含的定义(12.1 12.4, 12.8),这可能意味着将它们定义为已删除。
e.g:
12.4.5:如果出现以下情况,则将类X的默认析构函数定义为已删除: (5.1) - X是一个类似联合的类,其变体成员带有 非平凡析构函数,(5.2) - 任何可能构造的子对象 具有类型M(或其数组),并且M具有删除的析构函数或 从默认的析构函数中无法访问的析构函数,(5.3) - 或者,对于虚拟析构函数,查找非数组释放 函数导致歧义或被删除的函数或 从默认的析构函数中无法访问
如果您的使用属于其中一个已删除的类别,则使用default
将相当于使用delete
,而{}
则不会。