背景知识补充
但定义一个类时,我们显式地或隐式地指定在此类型的对象拷贝、移动、赋值和销毁时做什么。一个类通常通过定义5种特殊的成员函数来控制这些操作,包括:拷贝构造函数、拷贝赋值运算符(实质也是函数)、移动构造函数和析构函数. 在C++中我们称这些操作为拷贝控制操作.
如果我们没有显示地定义以上某一个特殊函数,则编译器会为我们自动定义一个,
另外还有一个特殊的函数: 默认构造函数,在开发者未定义的情况下,编译器会自动一个.
C++11, =default
通过将拷贝控制成员函数定义为=default 来显示地要求编译器生成默认的版本.
当我们在类内用=default修饰成员函数的声明时,编译器默认生成的函数隐式地声明为内联的.
C++11, =delete
在C++11标准下,我们可以将函数定义为删除的函数.
删除的函数 概念: 我们虽然声明了该函数,但不能以任何方式使用它们
如果操作呢?在函数的参数列表后面加上=delete 来指出我们希望将它定义为删除的, 也就是说通过"=delete"通知编译器,我们不希望定义该函数.