理解复制控制成员和构造函数--实例

来源:互联网 发布:c语言 贪心 编辑:程序博客网 时间:2024/05/23 21:01

#include<iostream>

#include<vector>

 

using namespace std;

 

class Exmpl

{

public:

       //默认构造函数

       Exmpl()

       {

              cout << "Exmpl()" << endl;

       }    

       //复制构造函数

       Exmpl (const Exmpl&)

       {

              cout << "Exmpl(const&)" << endl;

       }

       //赋值操作符

       Exmpl& operator = (const Exmpl &abc)

       {

              cout << "operator = (const Exmpl&)" << endl;

              return *this;

       }

      

       //析构函数

       ~Exmpl()

       {

              cout << "~Exmpl()" << endl;

       }

};

 

void func1(Exmpl obj)

{    

}

 

void func2(Exmpl& obj)

{    

}

 

Exmpl func3()

{

       Exmpl obj;

       return obj;     //返回Exmpl对象

}

 

int main()

{    

       Exmpl cobj;//调用默认构造函数创建Exmpl对象cobj

      

       func1(cobj);//调用复制构造函数

       //将形参Exmpl对象创建为实参Exmpl对象的副本

       //函数执行完毕后调用析构函数撤销形参的Exmpl对象

      

       func2(cobj);  //形参为Exmpl对象的引用,无需调用复制构造函数传递实参

      

       cobj = func3();    //调用默认构造函数创建局部Exmpl对象

       //函数返回时调用复制构造函数创建作为返回值副本的Exmpl对象

       //然后调用析构函数撤销局部Exmpl对象

       //然后调用赋值操作符

       //执行完赋值操作后, 调用析构函数撤销作为返回值副本的Exmpl对象

      

       Exmpl *p = new Exmpl;// 调用默认构造函数动态创建Exmpl对象

      

       vector<Exmpl> evec(3);//调用默认构造函数

       //创建一个临时值Exmpl对象

       //然后3次调用复制构造函数

       //将临时值Exmpl对象复制到

       //vector容器ever的每个元素

       //然后调用析构函数撤销临时值Exmpl对象

      

       delete p;//调用析构函数撤销动态创建的Exmpl对象

      

       //eveccobj生命期结束自动调用析构函数撤销

       //撤销evec需要调用析构函数3次因为evec有三个元素

      

       return 0;

}

原创粉丝点击