打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C /C入门之拷贝构造函数

拷贝构造函数是类的构造函数之一,它在类对象到类对象赋值的时候被调用,英文名Copy-Constructor。

(一)认识拷贝构造函数

它的一般定义如下(粗体显示部分):

class Integer{

int i;

static int count;

Integer(int pi):i(0){

count++;

this->i = pi;

}

Integer(const Integer& ii):i(0){

this->i=ii.i;

count++;

}

};

int Integer::count = 0;

int main(){

Integer one(1);

Integer two = one;

}

其中常量Integer型引用 ii 代表赋值操作中右边的操作数。也就是例子中main函数里的one。

(二)为什么需要拷贝构造函数以及什么时候需要自定拷贝函数

很明显,通过赋值操作(拷贝)产生的对象,其初始化与普通对象的初始化过程必须是不一样的。例子里面的Integer two,通过Integer one拷贝生成,在没有自定义拷贝函数的前提下,它的成员变量和one的成员变量值,是一模一样的。这个时候,编译器会生成并调用默认拷贝构造函数,这个构造函数做的事情,就是位拷贝,也就是把one对象里的所有数据,原封不动等复制到two对象中。

然而,为拷贝通常满足不了用户的需求。上面例子中,程序希望通过静态类变量count来统计所有Integer对象的个数。如果移去粗体部分的自定义拷贝构造函数,count的值永远是1,如论通过拷贝的方式产生了多少对象。显然,这不是程序设计者希望看到的结果。

另外一个用途就是在拷贝的时候,处理指针,引用等地址对象时,使用位拷贝往往不是设计者的初衷。

(三)继承中的拷贝构造函数

构造函数,拷贝构造函数和operator=重载函数,不属于类继承时被派生类继承的函数之列。

另外,由于类赋值操作会默认调用到拷贝构造函数,一些在operator=重载函数实现的逻辑,也可以被挪到拷贝构造函数当中

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
拷贝构造函数被调用的时机
C++中的临时对象
关于C 中的临时对象问题
探讨C中对象的“浅拷贝”与“深拷贝”
C++编程思想重点笔记
与LSGO一起学“9 引用(9.10 用值来传递对象)”
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服