[C++11 类的改进] --- 继承控制:=default和=delete

Posted Overboom

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C++11 类的改进] --- 继承控制:=default和=delete相关的知识,希望对你有一定的参考价值。

在 C++ 中声明自定义的类,编译器会默认帮助程序员生成一些他们未自定义的成员函数。这样的函数版本被称为” 默认函数”。这样的函数一共有六个:

  • 无参构造函数:创建类对象
  • 拷贝构造函数:拷贝类对象
  • 移动构造函数:拷贝类对象
  • 拷贝赋值函数:类对象赋值
  • 移动赋值函数:类对象赋值
  • 析构函数
:销毁类对象
    在 C++ 语法规则中,一旦程序员实现了这些函数的自定义版本,则编译器不会再为该类自动生成默认版本。

有时程序员会忘记上面提到的规则,最常见的是声明了带参数的构造,如果还需要无参构造函数,这时候必须定义出不带参数的版本。不过通过编译器的提示,这样的问题通常会得到更正。但更为严重的问题是,一旦声明了自定义版本的构造函数,则有可能导致我们定义的类型不再是 POD 类型,我们便不再能够享受 POD 类型为我们带来的便利。

对于上面提到的这些,我们无需过度担心,因为 C++11 非常贴心地为我们提供了解决方案,就是使用 =default 。

在 C++11 标准中称 = default 修饰的函数为显式默认【缺省】(explicit defaulted)函数,而称 =delete 修饰的函数为删除(deleted)函数或者显示删除函数。

C++11 引入显式默认和显式删除是为了增强对类默认函数的控制,让程序员能够更加精细地控制默认版本的函数。

1 =default

以上是关于[C++11 类的改进] --- 继承控制:=default和=delete的主要内容,如果未能解决你的问题,请参考以下文章

[C++11 类的改进] --- 继承控制:final和override

[C++11 类的改进] --- 继承控制:=default和=delete

[C++11 类的改进] --- 继承控制:=default和=delete

[C++11 类的改进] --- 继承控制:=default和=delete

[C++11 类的改进] --- 继承构造函数和委托构造函数

[C++11 类的改进] --- 继承构造函数和委托构造函数