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”可以应用于任意函数上,因此可以用于禁止类型重载。

posted @ 2020-04-05 21:23  KaifangquLuka  阅读(751)  评论(0编辑  收藏  举报