=default: 用于显式要求编译器提供合成版本的四大函数(构造、拷贝、析构、赋值)
例如:
class A{
public: A() = default; A(const A& a) = default; A& operator=(A&); ~A() = default; }
我们只能对具有合成版本的成员函数使用=default;
=delete,用于定义删除函数,在旧标准下,我们如果希望阻止拷贝可以通过显式声明拷贝
构造函数和拷贝赋值函数为private,但新标准下允许我们定义删除函数,例如:
struct NoCopy{ NoCopy() = default; NoCopy(const NoCopy&) = delete; // 阻止拷贝 NoCopy& operator=(const NoCopy&) = delete; //阻止赋值 ~NoCopy() = default; }
=delete可以告知编译器,不生成默认的这些成员。
这里有两点要注意:
1、=delete可以使用在任意的函数上(可以引导函数匹配过程),除了析构函数(析构函数为删除函数将
导致该类型无法销毁);=default必须用在有默认合成函数的函数上。
2、=delete必须出现在函数第一次声明的时候。
参考:https://blog.csdn.net/u010640235/article/details/51286445