首页 > 后端开发 > C++ > C 中的默认构造函数和析构函数:何时应使用'=default”与'{}”?

C 中的默认构造函数和析构函数:何时应使用'=default”与'{}”?

Mary-Kate Olsen
发布: 2024-12-06 09:14:10
原创
944 人浏览过

Default Constructors and Destructors in C  : When Should I Use

默认构造函数和析构函数的“=default”和“{}”之间的区别

在 C 中,默认构造函数和析构函数是特殊的如果用户未显式定义,则由编译器自动生成的成员函数。然而,对于某些场景,有必要覆盖这些默认行为,这就提出了“=default”和“{}”是否提供相同功能的问题。

默认析构函数

如果类需要虚拟析构函数,但实现与编译器生成的版本相同,可以使用“=default”语法。它确保编译器生成虚拟析构函数而不需要显式定义。另一方面,使用空定义“virtual ~Widget() {}”以最少的输入实现相同的效果。

默认构造函数

与析构函数不同,“=default”的影响默认构造函数的 " 与 "{}" 明显不同。当使用“Widget() = default”时,编译器会自动为“Widget”类生成默认构造函数。这个生成的构造函数的行为就像用户没有定义构造函数一样。因此,它有助于使该类成为 C 11 术语中的“平凡类型”。

相反,“Widget() {}”创建一个用户提供的默认构造函数,从而防止该类被视为平凡。 C 11 对简单类型进行了限制,允许诸如 memcpy 之类的操作来实现高效初始化。

结论

对于虚拟析构函数,“=default”和“{}”的行为类似。然而,对于默认构造函数,“=default”生成编译器提供的默认构造函数,而“{}”创建用户提供的默认构造函数,这可能会影响类的简单性。默认构造函数的“=default”和“{}”之间的选择应基于所需的行为以及对类的琐碎性的影响。

以上是C 中的默认构造函数和析构函数:何时应使用'=default”与'{}”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板