直接上代码,注释里写的很清楚了!
#include <vector>
#include<iostream>
struct Exml()
{
//
Exml(){cout<<"Exml()"<<endl};
//
Exml(const Exml &)
{
cout<<"Exml (const Exml&)"<<endl;
}
//
Exml & operator = (const Exml &rhe)
{
cout<<"operator Exml(const Exml&)"<<endl;
return *this;
}
~Exml(){cout<<"~Exml()"<<endl;}
}
void func1(Exml obj)
{
}
void func2(Exml & obj)
{
}
Exml func3(Exml & obj)
{
Exml obj;
return obj;
}
int main()
{
Exml eobj;// 调用默认的构造函数
func1(eobj);//调用复制构造函数,//函数执行完毕后调用Exml的析构函数撤销形参Exml对象
<span style="font-family: Arial, Helvetica, sans-serif;">func2(oebj);//形参为Exml对象的引用,无需调用复制构造函数床底实参</span>
oebj=func3();//调用默认构造函数创建局部Exml对象,/函数返回时调用复制构造函数创建作为返回值副本的Exml对象,//然后调用析构函数撤销局部Exml对象,//然后调用复制操作符,执行完赋值后,调用析构函数撤销Exml的副本</span>
Exml *p=new Exml();//调用默认构造函数动态创建Exml对象
vector<Exml> evec(3);//调用默认构造函数//创建一个临时值Exml对象,//然后3此调用复制构造函数,//将临时对象复制到evec中得每个元素中,//然后调用析构函数撤销临时Exml()。delete p;//调用析构函数撤销动态创建的Exml对象return 0;//evec生命周期结束,调用三次析构函数