C++11中的"=delete"
“=delete”关键字的使用
1 在特殊函数中进行使用
特殊函数是指在创建类的时候,编译器会隐式的生成以下函数:
C++11之前:
默认构造函数; 析构函数; 拷贝构造函数; 拷贝赋值运算符
C++11之后添加:
移动构造函数; 移动赋值运算符
"=delete"目的:阻止客户使用这些函数
在C++98的时候,已经有这种隐患,当时流行的做法是将这些函数声明为private,当有代码进行访问的时候(透过成员函数/friend class),会产生LINK错误
C++11中,如果见这些函数标记为“=delete”调用会产生编译错误
需要注意的是,如果类内需要调用特殊函数,比如单例模式,建议使用private的形式
class CSingleMode { public: static CSingleMode* GetObj() { static CSingleMode single; return &single; } private: CSingleMode() {} };
方便起见,会将“=delete”函数声明为public,因为编译器相比较于检查“=delete”会优先检查访问权限,因此可能会得到错误的错误信息
“=delete”可以应用于任意函数上,因此可以用于禁止类型重载。