1. 转自:lsgxeva
  2.  
  3. #define _CRT_SECURE_NO_WARNINGS
  4.  
  5. #include <iostream>
  6. #include <string>
  7. #include <vector>
  8. #include <map>
  9.  
  10. //c++11 类默认函数的控制:"=default" 和 "=delete"函数
  11.  
  12. /*
  13. C++ 的类有四类特殊成员函数,它们分别是:默认构造函数、析构函数、拷贝构造函数以及拷贝赋值运算符。
  14. 这些类的特殊成员函数负责创建、初始化、销毁,或者拷贝类的对象。
  15. 如果程序员没有显式地为一个类定义某个特殊成员函数,而又需要用到该特殊成员函数时,则编译器会隐式的为这个类生成一个默认的特殊成员函数。
  16. */
  17.  
  18. // C++11 标准引入了一个新特性:"=default"函数。程序员只需在函数声明后加上“=default;”,就可将该函数声明为 "=default"函数,编译器将为显式声明的 "=default"函数自动生成函数体。
  19. class X
  20. {
  21. public:
  22. X() = default; //该函数比用户自己定义的默认构造函数获得更高的代码效率
  23. X(int i)
  24. {
  25. a = i;
  26. }
  27.  
  28. private:
  29. int a;
  30. };
  31.  
  32. X obj;
  33.  
  34. // "=default"函数特性仅适用于类的特殊成员函数,且该特殊成员函数没有默认参数。
  35. class X1
  36. {
  37. public:
  38. int f() = default; // err , 函数 f() 非类 X 的特殊成员函数
  39. X1(int, int) = default; // err , 构造函数 X1(int, int) 非 X 的特殊成员函数
  40. X1(int = ) = default; // err , 默认构造函数 X1(int=1) 含有默认参数
  41. };
  42.  
  43. // "=default"函数既可以在类体里(inline)定义,也可以在类体外(out-of-line)定义。
  44. class X2
  45. {
  46. public:
  47. X2() = default; //Inline defaulted 默认构造函数
  48. X2(const X&);
  49. X2& operator = (const X&);
  50. ~X2() = default; //Inline defaulted 析构函数
  51. };
  52.  
  53. X2::X2(const X&) = default; //Out-of-line defaulted 拷贝构造函数
  54. X2& X2::operator= (const X2&) = default; //Out-of-line defaulted 拷贝赋值操作符
  55.  
  56. // 为了能够让程序员显式的禁用某个函数,C++11 标准引入了一个新特性:"=delete"函数。程序员只需在函数声明后上“=delete;”,就可将该函数禁用。
  57. class X3
  58. {
  59. public:
  60. X3();
  61. X3(const X3&) = delete; // 声明拷贝构造函数为 deleted 函数
  62. X3& operator = (const X3 &) = delete; // 声明拷贝赋值操作符为 deleted 函数
  63. };
  64.  
  65. // "=delete"函数特性还可用于禁用类的某些转换构造函数,从而避免不期望的类型转换
  66. class X4
  67. {
  68. public:
  69. X4(double)
  70. {
  71.  
  72. }
  73.  
  74. X4(int) = delete;
  75. };
  76.  
  77. // "=delete"函数特性还可以用来禁用某些用户自定义的类的 new 操作符,从而避免在自由存储区创建类的对象
  78. class X5
  79. {
  80. public:
  81. void *operator new(size_t) = delete;
  82. void *operator new[](size_t) = delete;
  83. };
  84.  
  85. void mytest()
  86. {
  87. X4 obj1;
  88. X4 obj2=obj1; // 错误,拷贝构造函数被禁用
  89.  
  90. X4 obj3;
  91. obj3=obj1; // 错误,拷贝赋值操作符被禁用
  92.  
  93. X5 *pa = new X5; // 错误,new 操作符被禁用
  94. X5 *pb = new X5[]; // 错误,new[] 操作符被禁用
  95.  
  96. return;
  97. }
  98.  
  99. int main()
  100. {
  101. mytest();
  102.  
  103. system("pause");
  104. return ;
  105. }

c++11 类默认函数的控制:"=default" 和 "=delete"函数 void fun() = default; void fun()=delete;的更多相关文章

  1. c++11 类默认函数的控制:"=default" 和 "=delete"函数

    c++11 类默认函数的控制:"=default" 和 "=delete"函数 #define _CRT_SECURE_NO_WARNINGS #include ...

  2. c++基础知识_c++11 类默认函数的控制:"=default" 和 "=delete"函数

    #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include <vecto ...

  3. c++11 默认函数的控制

    1. 类与默认函数: C++中声明自定义的类,编译器会默认生成未定义的成员函数: 构造函数 拷贝构造函数 拷贝赋值函数(operator=) 移动构造函数 移动拷贝函数 析构函数 编译器还会提供全局默 ...

  4. C++(1)C++类四个默认函数---构造函数、析构函数、拷贝函数、赋值函数

    C++构造函数和析构函数 默认构造函数指不带参数或者所有参数都有缺省值的构造函数!!! (1)构造函数.析构函数与赋值函数 构造函数.析构函数与赋值函数是每个类最基本的函数.它们太普通以致让人容易麻痹 ...

  5. C++类的const成员函数、默认的构造函数、复制形参调用函数(转)

    C++类的const成员函数 double Sales_item::avg_price() const { } const关键字表明这是一个const成员函数,它不可以修改Sales_item类的成员 ...

  6. C++ 空类默认产生的类成员函数

    C++的空类有哪些成员函数:. 缺省构造函数.. 缺省拷贝构造函数.. 缺省析构函数.. 缺省赋值运算符.. 缺省取址运算符.. 缺省取址运算符 const.     注意:有些书上只是简单的介绍了前 ...

  7. CPP_类默认函数:构造函数,拷贝构造函数,赋值函数和析构函数

    类默认函数:构造函数,拷贝构造函数,赋值函数和析构函数 // person.h #ifndef _PERSON_H_ #define _PERSON_H_ class Person{ public : ...

  8. 【C++缺省函数】 空类默认产生的6个类成员函数

    1.缺省构造函数. 2.缺省拷贝构造函数. 3. 缺省析构函数. 4.缺省赋值运算符. 5.缺省取址运算符. 6. 缺省取址运算符 const. <span style="font-s ...

  9. 堆(stack) 之 c 和 c++模板实现(空类默认成员函数 初谈引用 内联函数)

    //stack 的基本操作 #include <iostream> using namespace std; const int maxn = 3; typedef struct Stac ...

随机推荐

  1. Java精选笔记_面向对象(构造方法、this关键字、static关键字、内部类)

    构造方法constructor构造器 构造方法的定义 [修饰符]  类名 (形式参数列表){         //语句 } 构造器用于构造该类的实例.作用:用来初始化对象!一般由系统在创建对象(即类的 ...

  2. Python Scrapy 自动爬虫注意细节(2)

    一.自动爬虫的创建,需要指定模版 如: scrapy genspider -t crawl stockinfo quote.eastmoney.com crawl : 爬虫模版 stockinfo : ...

  3. Android UI优化——include、merge 、ViewStub

    在布局优化中,Androi的官方提到了这三种布局<include />.<merge />.<ViewStub />,并介绍了这三种布局各有的优势,下面也是简单说一 ...

  4. ios Instruments 内存泄露

    本文转载至 http://my.oschina.net/sunqichao/blog?disp=2&p=3 虽然iOS 5.0版本之后加入了ARC机制,由于相互引用关系比较复杂时,内存泄露还是 ...

  5. 硝烟中的Scrum和XP-我们如何实施Scrum 12)发布计划 13)组合XP

    12 怎样制定发布计划, 处理固定价格的合同 一次只计划一个sprint的事情会显得提前量不足, 提前做计划是个好习惯; 尤其是签了固定价格的合同之后, 不得不预先计划好, 防止无法按期交付的危险情况 ...

  6. 用ajax实现用户名的检测(JavaScript方法)

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  7. 关于layer.photos即照片显示的问题。

    在layer组件中,照片显示是不常用,今天做了一些不伤了. 在这里写出来,以备后用. 其中注意几个问题, 1.格式问题. 2.路径问题. 不同的layer有不同的格式,查看layerAPI中发现的格式 ...

  8. Dcloud开发-- 打开蓝牙

    这样打开APP就会直接提示是否要打开蓝牙: <script type="text/javascript"> mui.init(); mui.plusReady(func ...

  9. Java项目工程化之项目构建工具Maven

    欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝 ...

  10. JavaMVC框架之SpringMVC

    欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝 ...