C++11 类的六个默认函数及其使用
2015-09-04 10:39
453 查看
六个默认函数:
构造函数(construct)
析构函数(destruct)
复制构造函数(copy construct)
赋值(assign)
移动构造函数(move construct)
移动赋值(move)
测试代码:
测试:
情形一:A a等价于A a=A();
情形二:
情形三: A a,b; a=b;//b为左值,所以assign
情形四:
函数参数传递:
情形一:
情形二:
情形三:
构造函数(construct)
析构函数(destruct)
复制构造函数(copy construct)
赋值(assign)
移动构造函数(move construct)
移动赋值(move)
测试代码:
#include <iostream> using namespace std; int g_constructCount = 0; int g_copyConstructCount = 0; int g_destructCount = 0; int g_moveConstructCount = 0; int g_assignCount = 0; int g_moveCount = 0; struct A { A() { cout << "construct:" << ++g_constructCount << endl; } A(const A& a) { cout << "copy construct:" << ++g_copyConstructCount << endl; } A(A&& a) { cout << "move construct:" << ++g_moveConstructCount << endl; } ~A() { cout << "destruct:" << ++g_destructCount << endl; } A& operator=(const A& other) { cout << "assign:" << ++g_assignCount << endl; return *this; } A& operator=(A&& a) { cout << "move:" << ++g_moveCount << endl; return *this; } };
测试:
情形一:A a等价于A a=A();
情形二:
{ A a ; a = A();//A()为右值,所以move } 结果: construct:1 construct:2 move:1 destruct:1 destruct:2
情形三: A a,b; a=b;//b为左值,所以assign
情形四:
{ A a; A c(a); } 结果: construct:1 copy construct:1 destruct:1 destruct:2
函数参数传递:
void fun(A a) { cout << "funA" << endl; }
情形一:
{ A a; fun(a); } 结果: construct:1 copy construct:1 funA destruct:1 destruct:2
情形二:
{ A a; fun(move(a)); } 结果: construct:1 move construct:1 funA destruct:1 destruct:2
情形三:
{ fun(A()); } 结果: construct:1 funA destruct:1
相关文章推荐
- c++必须在类初始化列表中初始化的几种情况
- C++入门经典 笔记 (第十二章)创建引用
- C++ Primer : 第十三章 : 动态内存管理类
- C++RemoveReference
- C语言中变量定义的位置
- C++ Primer : 第十三章 : 拷贝控制示例
- C++中字符数组处理可变长字符串
- C++四大函数作业解析
- C++ 中使用字符数组来存放未知长度的字符串
- 递归复习,递归输出字符串的全排列
- C++中成员变量的初始化方法
- C++类中的常量
- 设计模式c++(一)----工厂模式
- C++和Java中枚举enum的用法
- C++单例模式的模板基类
- C++中直接管理内存的方式
- C++ GUI QT4 编程--gotocell2 在QT5下编译出现的问题及解决
- 《C++ Primer Plus》读书笔记
- [C++] 智能指针与循环引用
- C++之随笔(二)