临时变量与复制构造函数(二)
来源:互联网 发布:mac book pro速度慢 编辑:程序博客网 时间:2024/06/05 22:35
为了直观观察,以下代码中复制构造函数会把成员变量num+1
class B{int num;public:B():num(0){cout << "默认构造函数" << " num= "<< num <<endl;}B(int n) :num(n){cout << "带参构造函数" << " num= " << num << endl;}B(const B &b){num = b.num+1;cout << "复制构造函数" << " num= " << num << endl;}/*B(B &&b){cout << "移动构造函数" << endl;}*/B& operator=(const B &b){cout << "赋值操作符" << " num= " <<b. num << endl;if (this == &b)return *this;num = b.num;return *this;}~B(){cout << "析构函数" << " num= " << num << endl;}};B play(B b){B bb(79);return bb;}void main(){{B b1(1);B b2 = play(b1);}cout << "-------------------------" << endl;{B b1;B b2(10);b2 = play(b1);}}
输出:
以上结果可以看出,一个函数调用结束后,首先析构函数代码产生的局部变量,然后析构输入参数产生的临时变量,最后析构返回值产生的临时变量。
把上面代码中的play函数进行修改,进行对比:
B play(B b){B bb(79);return b;}void main(){{B b1;B b2 = play(b1);}cout << "-------------------------" << endl;{B b1;B b2(10);b2 = play(b1);}}
输出:
默认构造函数 num= 0 //b1
复制构造函数 num= 1 //复制b1给play的参数b
带参构造函数 num= 79 //局部变量bb
复制构造函数 num= 2 /play的参数b通过复制构造函数,产生临时变量,作为返回值,该返回值直接“命名为”b2(这是编译器的优化?)
析构函数 num= 79 //局部变量bb析构
析构函数 num= 1 //play的参数b析构
析构函数 num= 2 //b2析构
析构函数 num= 0 //b1析构
-------------------------
默认构造函数 num= 0 //b1
带参构造函数 num= 10 //b2
复制构造函数 num= 1 //复制b1给play的参数b
带参构造函数 num= 79 //局部变量bb
复制构造函数 num= 2 //play的参数b通过复制构造函数,产生临时变量,作为返回值
析构函数 num= 79 //局部变量bb析构
析构函数 num= 1 //play的参数b析构
赋值操作符 num= 2 //b2通过赋值操作符重新赋值
析构函数 num= 2 //play的返回值析构
析构函数 num= 2 //b2析构
析构函数 num= 0 //b1析构
- 临时变量与复制构造函数(二)
- 临时变量与复制构造函数
- 复制构造函数和隐式转换 ---临时变量问题
- c++类临时对象、复制构造函数、析构函数 VS2017 与gcc 编译器对比
- c++ 赋值构造函数 临时变量 临时对象 之一
- 复制构造函数与赋值构造函数
- 复制构造函数与赋值构造函数
- 复制构造函数与拷贝构造函数
- 构造函数与复制构造函数
- 关于构造函数与复制构造函数
- 临时对象与拷贝构造函数
- 临时对象与拷贝构造函数
- C++13.1 复制构造函数-----临时对象(不是很懂)
- 临时变量调用拷贝构造函数的次数
- 复制构造函数(拷贝构造函数)
- 复制构造函数(拷贝构造函数)
- 复制构造函数(拷贝构造函数)
- 复制构造函数(拷贝构造函数)
- oc base64
- 笔谈OpenGL ES(二)
- IOS自学-UI基础01
- mmap详解
- Git pull 出现Unlink of file '.git/objects/pack/.tmp-xxx' failed. Should I try again? (y/n) 解决办法
- 临时变量与复制构造函数(二)
- lambda表达式
- sysctl
- 程序员的这些个笑话 你都看得懂吗?
- 使用任务设计四个并行输入数的排序组合逻辑
- SQL语句、PL/SQL块和SQL*Plus命令之间的区别
- iphone,ipad,关于icon图标的那些事
- Drools 规则引擎(上)
- Android制作曲线、柱状图、饼形等图表——使用AChartEngine