#include<iostream.h>
class B
{
public:
B()
{
cout<<"default constructor"<<endl;
}
B(B& cp)
{
data = cp.data +1;
cout<<"In copy constructor "<<"data is "<<data<<endl;
}
~B()
{
cout<<"destructed"<<"data de is: "<<data<<endl;
}
B(int i):data(i) //B(int) works as a converter ( int -> instance of B)
{
cout<<"constructed by parameter "<<data<<endl;
}
private:
int data;
};
B Play( B b)
{
cout<<"In Play()"<<endl;
return b ;
}
int main() //constructed by parameter 5
{
B t1 = Play(5);
B t2 = Play(t1);
cout<<"Be about to leave/n";
return 0;
}
这段代码的输出是:
constructed by parameter 5 -----> 从5到B的构造是在Play中完成.这个过程不会调用拷贝构造.************
In Play()
In copy constructor data is 6 ----->拷贝构造t1. 其实play在返回时有一个临时对象,但是不会print出来
destructeddata de is: 5 ---->函数play结束, 析构b
In copy constructor data is 7 ---->拷贝构造Play中的b
In Play()
In copy constructor data is 8 ---->拷贝构造t2
destructeddata de is: 7 -------->析构play中的b
Be about to leave
destructeddata de is: 8 --->析构t2
destructeddata de is: 6 ----->析构t1