sophia_hxw

人生有三恨,一恨鲫鱼有刺,二恨海棠无香,三恨红楼未完!----------张爱玲
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

浅析复制构造函数

Posted on 2016-07-06 16:18  sophia_hxw  阅读(159)  评论(0编辑  收藏  举报

#1,What?

拷贝构造函数,又称复制构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。

其唯一的形参必须是引用,但并不限制为const,一般普遍的会加上const限制。

 

#2,When?

在C++中,下面三种对象需要调用拷贝构造函数(有时也称“复制构造函数”):

1) 一个对象作为函数参数,以值传递的方式传入函数体

2) 一个对象作为函数返回值,以值传递的方式从函数返回;

3) 一个对象用于给另外一个对象进行初始化(常称为赋值初始化);

 

3,How?

上面的概念性的东西是某度来的,下面是我自己的小小见解。我曾经在面试时,被详细问道过这个问题,之前并未总结过关于复制构造函数的一些基础和用法之类的,却也能三三两两的说出一部分。只是没有系统化的东西,总让我觉得有点不踏实。在我看来,复制构造函数,有点像是在把一个对象“送”给另一个对象时需要用到的函数。

比如说,在调用函数时,若形参是传值方式,那“送进来”的实参实际是主调函数中与这个实参同名的对象的一个副本;在函数调用完毕,返回一个对象时,如果返回值的形式是一个类,那返回的这个类的对象实质是把被调函数距离返回语句最近的那个同名变量作为返回值副本“送出”函数;最后就是“送过去”一个对象副本来新建另一个对象。说是副本,严格来讲,应该是复本,有一个复制的意思在里面。

自己体会,这个东西,想明白了就灰常简单!