#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析构