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”可以应用于任意函数上,因此可以用于禁止类型重载。
原文链接: https://www.cnblogs.com/Kaifangqu/p/12634512.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/195388

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午6:58
下一篇 2023年2月12日 下午6:58

相关推荐