#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <string>
#include <vector>
#include <map> //c++11 类默认函数的控制:"=default" 和 "=delete"函数 /*
C++ 的类有四类特殊成员函数,它们分别是:默认构造函数、析构函数、拷贝构造函数以及拷贝赋值运算符。
这些类的特殊成员函数负责创建、初始化、销毁,或者拷贝类的对象。
如果程序员没有显式地为一个类定义某个特殊成员函数,而又需要用到该特殊成员函数时,则编译器会隐式的为这个类生成一个默认的特殊成员函数。
*/ // C++11 标准引入了一个新特性:"=default"函数。程序员只需在函数声明后加上“=default;”,就可将该函数声明为 "=default"函数,编译器将为显式声明的 "=default"函数自动生成函数体。
class X
{
public:
X() = default; //该函数比用户自己定义的默认构造函数获得更高的代码效率
X(int i)
{
a = i;
} private:
int a;
}; X obj; // "=default"函数特性仅适用于类的特殊成员函数,且该特殊成员函数没有默认参数。
class X1
{
public:
int f() = default; // err , 函数 f() 非类 X 的特殊成员函数
X1(int, int) = default; // err , 构造函数 X1(int, int) 非 X 的特殊成员函数
X1(int = ) = default; // err , 默认构造函数 X1(int=1) 含有默认参数
}; // "=default"函数既可以在类体里(inline)定义,也可以在类体外(out-of-line)定义。
class X2
{
public:
X2() = default; //Inline defaulted 默认构造函数
X2(const X&);
X2& operator = (const X&);
~X2() = default; //Inline defaulted 析构函数
}; X2::X2(const X&) = default; //Out-of-line defaulted 拷贝构造函数
X2& X2::operator= (const X2&) = default; //Out-of-line defaulted 拷贝赋值操作符 // 为了能够让程序员显式的禁用某个函数,C++11 标准引入了一个新特性:"=delete"函数。程序员只需在函数声明后上“=delete;”,就可将该函数禁用。
class X3
{
public:
X3();
X3(const X3&) = delete; // 声明拷贝构造函数为 deleted 函数
X3& operator = (const X3 &) = delete; // 声明拷贝赋值操作符为 deleted 函数
}; // "=delete"函数特性还可用于禁用类的某些转换构造函数,从而避免不期望的类型转换
class X4
{
public:
X4(double)
{ } X4(int) = delete;
}; // "=delete"函数特性还可以用来禁用某些用户自定义的类的 new 操作符,从而避免在自由存储区创建类的对象
class X5
{
public:
void *operator new(size_t) = delete;
void *operator new[](size_t) = delete;
}; void mytest()
{
X4 obj1;
X4 obj2=obj1; // 错误,拷贝构造函数被禁用 X4 obj3;
obj3=obj1; // 错误,拷贝赋值操作符被禁用 X5 *pa = new X5; // 错误,new 操作符被禁用
X5 *pb = new X5[]; // 错误,new[] 操作符被禁用 return;
} int main()
{
mytest(); system("pause");
return ;
}

最新文章

  1. 【原创】xgboost 特征评分的计算原理
  2. Linux远程传输命令之scp使用方法
  3. OpenStack 加入新的节点,创建虚拟机失败的问题
  4. Python文件之----JSON
  5. MINA、Netty、Twisted一起学(十二):HTTPS
  6. flask接收post提交的json数据并保存至数据库
  7. linux下启动和关闭tomcat服务的方式
  8. 《HTTP - 基于http的认证》
  9. Charles 安装图解(Mac 抓包工具)
  10. FineBI学习系列之FineBI的ETL处理(图文详解)
  11. SQLSERVER群集故障转移笔记
  12. Palindrome Number leetcode java
  13. DataStage 八、清除日志
  14. 新浪面试题:只允许使用++操作符实现加减乘除运算(c语言版)
  15. 201621123005《Java程序设计》第十一次实验总结
  16. 搜索引擎的选择与在chrome上的设置
  17. Dubbo分享
  18. 【HDU4966】GGS-DDU
  19. 值得一做》关于双标记线段树两三事BZOJ 1798 (NORMAL-)
  20. EasyUI的tree展开所有的节点或者根据特殊的条件控制展示指定的节点

热门文章

  1. PIE SDK地图图层渲染方案管理
  2. python 十大经典排序算法
  3. DataX 安装和使用
  4. 牛客网Java刷题知识点之数组、链表、哈希表、 红黑二叉树
  5. 深入理解JavaScript系列(13):This? Yes,this!
  6. [转]Show parameter &amp; Table Not exists
  7. 微信小程序参考资料及网址
  8. sql 行列转换
  9. SQL Server与Oracle有什么区别?
  10. java字节码速查笔记