一个什么都不做的虚拟析构函数是
virtual ~ClassName() {}自从C++11 we can alternatively say
virtual ~ClassName() = default;这两者有什么区别吗?
发布于 2017-08-29 17:16:44
主要区别在于,对于默认函数,有一些规则可以指定在何种情况下删除它们(cf )。c++14(N4296) 8.4、12.1、12.4、12.8)
8.4.2.5:显式默认函数和隐式声明函数统称为默认函数,实现应为它们提供隐含定义(12.1 12.4,12.8),这可能意味着将它们定义为已删除。
例如:
12.4.5:类X的默认析构函数定义为已删除,条件是:(5.1) -X是具有具有非平凡析构函数的变体成员的类似于联盟的类,(5.2)任何可能构造的子对象都具有类类型M(或其中的数组),而M具有已删除的析构函数或从默认析构函数中无法访问的析构函数,(5.3) -或者,对于虚拟析构函数,查找非数组解分配函数会导致模糊或从默认析构函数中删除或无法访问的函数。
如果您的使用属于已删除的类别之一,使用default将等同于使用delete,而{}则不会。
https://stackoverflow.com/questions/44886942
复制相似问题