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

本文详细解析了C++中不同类型的构造函数(包括默认构造函数、复制构造函数)和析构函数的作用机制,同时介绍了如何通过这些机制管理对象的生命周期,并探讨了在函数调用、对象复制和赋值过程中的具体应用。

#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;

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值