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

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-06 09:14:10948浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn