C++的类有四类特殊成员函数 (special member function),它们分别是:默认构造函数、析构函数、拷贝构造函数以及拷贝赋值运算符。这些类的特殊成员函数负责创建、初始化、销毁,或者拷贝类的对象。如果程序员没有显式地为一个类定义某个特殊成员函数,而又需要用到该特殊成员函数时,则编译器会隐式的为这个类生成一个默认的特殊成员函数。当存在用户自定义的特殊成员函数时,编译器将不会隐式的自动生成默认特殊成员函数,而需要程序员手动编写加大了程序员的工作量。并且手动编写的特殊成员函数的代码执行效率编译器自动生成的特殊成员函数

C++11标准引入了一个新特性:defaulted函数。程序员只需在函数声明后加上”=default;”,就可将该函数声明为defaulted函数,编译器将为显式声明的defaulted函数自动生成函数体

  • defaulted函数特性仅适用于类的特殊成员函数,且该特殊成员函数没有默认参数。
  • defaulted函数既可以在类体里(inline)定义,也可以在类体外(out-of-line)定义。

C++11 中,可在想要 “禁止使用” 的特殊成员函数声明后加 “= delete”,而需要保留的加 “= default” 或者不采取操作

class noncopyable{protected:
#if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) && !defined(BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS)BOOST_CONSTEXPR noncopyable() = default;                 //默认保留~noncopyable() = default;                                //默认保留
#elsenoncopyable() {}~noncopyable() {}
#endif
#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)noncopyable( const noncopyable& ) = delete;              //禁用noncopyable& operator=( const noncopyable& ) = delete;   //禁用
#elseprivate:  // emphasize the following members are privatenoncopyable( const noncopyable& );noncopyable& operator=( const noncopyable& );
#endif};

C++——C++11中的defalut和delete关键字相关推荐

  1. C++11中override的使用

    override是C++11中的一个继承控制关键字.override确保在派生类中声明的重载函数跟基类的虚函数有相同的声明. override明确地表示一个函数是对基类中一个虚函数的重载.更重要的是, ...

  2. C++11中= delete;的使用

    C++11中,对于deleted函数,编译器会对其禁用,从而避免某些非法的函数调用或者类型转换,从而提高代码的安全性. 对于 C++ 的类,如果程序员没有为其定义特殊成员函数,那么在需要用到某个特殊成 ...

  3. C/C++基础进阶篇:C++11 中引入的 delete 描述符使用场景

    C++11 中引入的 delete 描述符主要有如下两个使用场景: 禁止编译器自动生成拷贝 Effective C++中提到 通过"私有化 + 只声明.不定义" 的方法禁止编译器生 ...

  4. C++11中=delete的巧妙用法

    C++11中,当我们定义一个类的成员函数时,如果后面使用"=delete"去修饰,那么就表示这个函数被定义为deleted,也就意味着这个成员函数不能再被调用,否则就会出错. #i ...

  5. C++11中的delete关键字

    C++11 中,可在想要 "禁止使用" 的特殊成员函数声明后加 "= delete"(当然也可以声明为私有函数或者保护函数),而需要保留的加 "= d ...

  6. C++笔记-C++11中default及delete的使用

    今天在研究某开源事例代码时发现有人用default和delete关键字,在此学习了下,写了个小例子. default和delete只能作用于构造函数和析构函数. default关键字写了后会自动生成某 ...

  7. C++11中头文件type_traits介绍

    C++11中的头文件type_traits定义了一系列模板类,在编译期获得某一参数.某一变量.某一个类等等类型信息,主要做静态检查. 此头文件包含三部分: (1).Helper类:帮助创建编译时常量的 ...

  8. C++11中std::addressof的使用

    C++11中的std::addressof获得一个对象的实际地址,即使 operator& 操作符已被重载.它常用于原本要使用 operator& 的地方,它接受一个参数,该参数为要获 ...

  9. C++/C++11中std::string用法汇总

    C++/C++11中std::string是个模板类,它是一个标准库.使用string类型必须首先包含<string>头文件.作为标准库的一部分,string定义在命名空间std中. st ...

最新文章

  1. spark 执行流程及各组件执行
  2. Zabbix客户端配置环境检查
  3. Linux / TCPIP / 判断 client 已经关闭的方法
  4. weblogic部署连接池
  5. C++ Prime:范围for语句
  6. Oracle 加密配置,Oracle sqlnet设置网络传输加密
  7. 九个Console命令,让 JS 调试更简单
  8. 操作系统原理与实践-2操作系统的引导
  9. Keepalived 安装配置
  10. Windows Azure Storage (3) Windows Azure Storage Service存储服务之Blob详解(中)
  11. logback日志大量写磁盘导致微服务不能正常响应的解决方案
  12. sCMOS相机的读出噪声
  13. 判断数据表是否存在,不存在则创建
  14. JS - Object and Property的删除用法
  15. Webservice调用方式:axis,soap详解
  16. 计算机系统日期修改吗,电脑系统时间如何修改,教你电脑系统时间如何修改
  17. 攻防世界web新手题解题writeup
  18. 文本换行符/空格符怎么在HTML中进行转换?
  19. ORACLE EBS中附件功能的使用
  20. HANA DB重置SYSTEM密码

热门文章

  1. matlab fft函数说明_关于“如何使用FFT计算天线阵列方向图”学习资料总结
  2. java 两层while_java – while while循环满足2个条件之一
  3. sicknss剖解整理
  4. [Unity] FlowCanvas 使用注意事项
  5. linux 参数扩展,Shell Bash 中的参数扩展
  6. Mybatis(5)自定义Mybatis分析以及自定义实现
  7. vuejs项目性能优化 - 总结篇
  8. linux man命令 0-8,Linux命令Man解释:SUDO(8):以root身份执行指令
  9. 两列数据找出相同项自动对应_关于数据核对的6个超级技巧,用过的人都说好...
  10. Emlog明月浩空主题模板V2.7分享