C++中构造函数与析构函数的使用(2)

发布时间:2021-06-06

$%&’’()*+,-.

/01%+$2

()*+,-3$4,’)$5&*"’)*67899:;&普通构造函数()*+,-3$4,’)()*+,-<4)5=*:;&拷贝构造函数!()*+,-3>4+?:;&析构函数

()*+,-<4/=*&)=63$4,’)()*+,-<4)5=*:;&赋值函数/*+>&)=2

$5&*"@?&)&;&用于保存字符串

A;

&()*+,-的普通构造函数()*+,-22()*+,-3$4,’)$5&*"’)*:.+B3’)*’

7899:.@

?&)&6,=C$5&*D!E;

"

@?&)&6‘’

;A=%’=.

+,)%=,-)56’)*%=,3’)*:;

@?&)&6,=C$5&*D%=,-)5F!E;’)*$/G3@?&)&H’)*:;

AA

&()*+,-的析构函数()*+,-22!()*+,-3>4+?:.?=%=)=DE@?&)&;A

()*+,-22()*+,-3$4,’)()*+,-<4)5=*:.

&允许操作4)5=*的私有成员@?&)&+,)%=,-)56’)*%=,34)5=*I@?&)&:;@?&)&6,=C$5&*D%=,-)5F!E;’)*$/G3@?&)&H4)5=*I@

?&)&:;

A

&赋值函数

()*+,-<()*+,-224/=*&)=63$4,’)()*+,-<4)5=*:.

&3!:检查自赋值+B3)5+’66<4)5=*:*=)0*,")5+’;

&3J:释放原有的内存资源!"#

?=%=)=DE@?&)&;

&3K:分配新的内存资源,并复制内容+,)%=,-)56’)*%=,34)5=*I@?&)&:;

@?&)&6,=C$5&*D%=,-)5F!E;’)*$/G3@?&)&H4)5=*I@?&)&:;&3L:返回本对象的引用*=)0*,")5+’;A

在本例中类()*+,-拷贝构造函数与普通构造函数的区别是:在函数入口处无需与7899进行比较,这是因为“引用”不可能是7899,而“指针”可以为7899。类()*+,-的赋值函数比构造函数复杂得多,分四步实现:

3!:第一步,检查自赋值。你可能会认为多此一举,难道有人会愚蠢到写出&6&这样的自赋值语句M的确不会。但是间接的自赋值仍有可能出现,例如&内容自赋值16&;…$61;…

&6$;

&地址自赋值16<&;…

&6"1;

也许有人会说:“即使出现自赋值,我也可以不理睬,大不了花点时间让对象复制自己而已,反正不会出

错M”他真的说错了。看看第二步的?=%=)=,自杀后还能复制自己吗N所以,如果发现自赋值,应该马上终止函数。注意不要将检查自赋值的+B语句+B3)5+’66<4)5=*:错写成为:

+B3")5+’664)5=*:3J:第二步,用?=%=)=释放原有的内存资源。如果现在不释放,以后就没机会了,将造成内存泄露。3K:第三步,分配新的内存资源,并复制字符串。注意函数’)*%=,返回的是有效字符串长度,不包含结束符‘’。函数’)*$/G则连‘’一起复制。3L:第四步,返回本对象的引用,目的是为了实现&616$这样的链式表达。注意不要将*=)0*,")5+’错写成*=)0*,)5+’。那么能否写成*=)0*,4)5=*呢N结果是不是一样呢N不可以M结果可能完全不同,因为我们不知道参数4)5=*的生命期。有可能4)5=*3下转!KK页:

"

C++中构造函数与析构函数的使用(2).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219