构造函数、拷贝构造函数、赋值函数、析构函数的调用顺序
2011-09-15 20:51
363 查看
例1
输出结果:
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
输出结果:
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
输出:
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析构
#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析构
相关文章推荐
- 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
- 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
- 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
- 总结c++类的构造函数 拷贝构造函数 析构函数 赋值运算符重载的特点以及函数调用顺序
- 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
- 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
- C++继承中构造函数、析构函数调用顺序及虚析构函数
- 关于构造函数和析构函数的调用顺序
- c++深/浅拷贝 && 构造函数析构函数调用顺序练习题
- C++中构造函数与析构函数的调用顺序
- 继承中构造函数和析构函数地调用顺序
- C++ 构造函数和析构函数的调用顺序、虚析构函数的作用
- 编写String类的普通构造函数、拷贝构造函数、析构函数、赋值函数
- 内嵌子对象时派生类构造函数与析构函数的调用顺序
- 继承中构造函数和析构函数的调用顺序
- 继承中的构造和析构 继承和组合混搭情况下,构造函数、析构函数调用顺序研究
- 构造函数,拷贝构造函数,赋值函数,析构函数
- 实现C++类中默认的四个方法默认构造函数、析构函数、拷贝构造函数、赋值函数
- 第十一周 阅读程序4 类的继承构造函数与析构函数调用的先后顺序
- C++ 构造函数和析构函数的调用顺序、虚析构函数的作用