首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >虚拟destructor=default和空体有什么区别吗?

虚拟destructor=default和空体有什么区别吗?
EN

Stack Overflow用户
提问于 2017-07-03 13:34:15
回答 1查看 473关注 0票数 9

一个什么都不做的虚拟析构函数是

代码语言:javascript
复制
virtual ~ClassName() {}

自从C++11 we can alternatively say

代码语言:javascript
复制
virtual ~ClassName() = default;

这两者有什么区别吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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,而{}则不会。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44886942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档