函数禁用delete与替代函数体定义default

介绍deletedefault在函数中的使用方法。

函数禁用delete

  在函数声明后加入=delete即可将该函数标记,一旦被调用则会导致编译错误。
  例如:

1
2
3
4
5
struct Test {
void* operator new(std::size_t) = delete;
void* operator new[](std::size_t) = delete;
};
Test *p = new Test; // 编译错误

替代函数体定义dafault

  在函数声明后加入=default即可替代函数体进行定义,适用范围类的特殊成员函数,且该特殊成员函数没有默认参数。
  例如:

1
2
3
4
class Test {
public:
Test() = default;
};

  等价于:

1
2
3
4
5
6
class Test {
public:
Test()
{
}
};

参考

1
2
https://en.cppreference.com/w/cpp/language/member_functions#Special_member_functions
https://en.cppreference.com/w/cpp/language/function#Deleted_functions