构造函数、拷贝构造函数、赋值函数、析构函数的调用顺序
来源:互联网 发布:剑灵淘宝金币怎么买 编辑:程序博客网 时间:2024/05/21 18:49
#include "stdafx.h"#include <iostream>#include <assert.h>using namespace std;class B{public:B(){cout<<"default constructor\n";}~B(){cout<<"destructed\n";}B(int i):data(i){cout<<"constructed by parameter"<<data<<endl;}B(B &b){cout<<"copy constructor\n";data=b.data;}protected:private:int data;};B play(B b){return b;}int _tmain(int argc, _TCHAR* argv[]){B t1=play(5);B t2=play(t1);system("pause");return 0;}
输出结果:
constructed by parameter 5
copy constructor
destructed
copy constructor
copy constructor
destructed
destructed
destructed
分析:
constructed by parameter 5 调用带参数的构造函数在play内产生临时对象
copy constructor 调用复制构造函数把临时对象复制到t1
destructed play内的临时对象析构
copy constructor 调用复制构造函数在play内产生临时对象
copy constructor 调用复制构造函数把临时对象复制到t2
destructed play内的临时对象析构
destructed t2析构
destructed t1析构
例2
#include "stdafx.h"#include <iostream>#include <assert.h>using namespace std;class B{public:B(){cout<<"default constructor\n";}~B(){cout<<"destructed\n";}B(int i):data(i){cout<<"constructed by parameter"<<data<<endl;}B(B &b){cout<<"copy constructor\n";data=b.data;}protected:private:int data;};B play(B b){return b;}int _tmain(int argc, _TCHAR* argv[]){B t1=play(5);B t2=play(10);system("pause");return 0;}
输出结果:
constructed by parameter 5
copy constructor
destructed
constructed by parameter 10
copy constructor
destructed
destructed
destructed
分析:
constructed by parameter 5 调用带参数的构造函数play内产生临时对象
copy constructor 调用复制构造函数把临时对象复制到t1
destructed play内临时对象析构
constructed by parameter 10 调用带参数的构造函数play内产生临时对象
copy constructor 调用复制构造函数把临时对象复制到t2
destructed play内临时对象析构
destructed t2析构
destructed t1析构
例3
#include "stdafx.h"#include <iostream>#include <assert.h>using namespace std;class B{public:B(){cout<<"default constructor\n";}~B(){cout<<"destructed\n";getchar();}B(int i){cout<<"constructed by parameter"<<endl;}B(B &b){cout<<"copy constructor\n";getchar();}B& operator =(const B&b){cout<<"This is an assigment function\n";return *this;}protected:private:};B play(){B b;return b;}int _tmain(int argc, _TCHAR* argv[]){B b;b=play();return 0;}
输出:
default constructor
default constructor
copy constructor
destructed
This is an assigment function
destructed
destructed
分析:
default constructor main()函数中的对象a通过默认构造函数创建
default constructor play()函数中的对象a通过默认构造函数创建
copy constructor play()返回时生成临时对象是由复制构造函数生成的
destructed play()函数中的a对象析构
This is an assigment function 临时对象赋给a使用赋值函数
destructed 临时对象析构
destructed main()函数中的对象a析构
- 构造函数、拷贝构造函数、赋值函数、析构函数的调用顺序
- 拷贝构造,构造函数,析构函数的调用顺序
- 类的构造函数、拷贝构造函数、赋值函数、析构函数,分别在何时调用。
- 类 构造 析构函数 调用顺序/ 复制(拷贝)构造&&赋值函数
- 构造函数,拷贝构造函数,赋值函数,析构函数
- 构造函数,拷贝构造函数,赋值函数,析构函数
- 构造函数、析构函数、拷贝构造函数、赋值函数
- 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
- 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
- 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
- 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
- srting的类构造函数、析构函数、拷贝构造函数与赋值构造函数
- string类的构造函数,析构函数,拷贝构造函数和赋值构造函数
- String构造函数 拷贝构造函数 析构函数 赋值构造函数的实现
- 总结c++类的构造函数 拷贝构造函数 析构函数 赋值运算符重载的特点以及函数调用顺序
- 拷贝构造和赋值函数(pushback调用拷贝构造函数)
- 构造函数 拷贝函数 赋值构造函数
- 构造函数 拷贝函数 赋值构造函数
- mysql中的游标问题
- Linux more 命令用法详解
- 主引导扇区(MBR),分区表(DPT)及活动分区(DBR)
- QT模态对话框及非模态对话框
- Mysql语法大全
- 构造函数、拷贝构造函数、赋值函数、析构函数的调用顺序
- 找出数组中唯一的重复元素
- Java引用总结
- 心情篇
- 9-15课堂笔记JDBC的事务控制和批量处理
- Ext如何动态添加一行组件
- uboot移植之启动过程--汇编过程start.s
- Myeclipse Debug
- MFC程序运行过程梳理