首页 >后端开发 >C++ >C 中默认构造函数和析构函数的'=default”和'{}”有什么区别?

C 中默认构造函数和析构函数的'=default”和'{}”有什么区别?

Linda Hamilton
Linda Hamilton原创
2024-12-07 04:47:10483浏览

What's the Difference Between

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

而“=default”和“{” }" 对于默认构造函数和析构函数来说可能看起来可以互换,在考虑非虚拟析构函数和

非虚拟析构函数

处理非虚拟析构函数时,“=default”语法起着重要作用。它指示编译器自动生成析构函数,就像为普通类生成析构函数一样,从而使类型被视为普通类型。另一方面,“{}”创建一个用户提供的析构函数,改变类的平凡状态。

非虚拟构造函数

类似地,对于非- 虚拟构造函数,使用“=default”允许编译器生成默认构造函数,保持简单性。但是,“{}”指定了用户提供的构造函数,可能会影响类的琐碎性。

琐碎类

在 C 11 中,琐碎类是指不没有任何用户提供的特殊成员函数(默认构造函数、复制/移动构造函数/赋值、析构函数)。这些函数是自动生成的,允许应用像 memcpy 这样的优化。

示例

考虑以下代码:

struct Trivial
{
  int foo;
};

struct NotTrivial
{
  int foo;

  NotTrivial() {}
};

struct Trivial2
{
  int foo;

  Trivial2() = default;
};
  • 琐碎就是琐碎,因为它没有任何用户提供的特殊成员
  • NotTrivial 并不平凡,因为它有一个用户提供的默认构造函数。
  • Trivial2 很平凡,即使它有一个标记为“=default”的构造函数,因为这仍然调用编译器的默认构造函数

结论

虽然“=default”和“{}”可能看起来很相似,但它们在使用时会对类的琐碎性产生重大影响与非虚拟析构函数或构造函数。 “=default”保留编译器的默认行为并保留琐碎性,而“{}”创建用户提供的函数并可能改变类的琐碎性状态。

以上是C 中默认构造函数和析构函数的'=default”和'{}”有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

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