C++中 =default,=delete用法

=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