高质量C++/C编程指南-第9章-类的构造函数、析构函数与赋值函数(4[VC/C++编程]
本文“高质量C++/C编程指南-第9章-类的构造函数、析构函数与赋值函数(4[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
类String的赋值函数比构造函数复杂得多,分四步实现:
(1)第一步,查抄自赋值.你大概会认为画蛇添足,莫非有人会笨拙到写出 a = a 这样的自赋值语句!的确不会.但是间接的自赋值仍有大概呈现,比方
// 内容自赋值
b = a;
…
c = b;
…
a = c;
// 地址自赋值
b = &a;
…
a = *b;
大概有人会说:“即便呈现自赋值,我也可以不睬睬,大不了化点时间让对象复制自己罢了,反正不会出错!”
他真的说错了.看看第二步的delete,自杀后还能复制自己吗?所以,假如发现自赋值,应当即刻终止函数.注意不要将查抄自赋值的if语句
if(this == &other)
错写成为
if( *this == other)
(2)第二步,用delete释放原有的内存资源.假如目前不释放,今后就没机会了,将造成内存泄露.
(3)第三步,分配新的内存资源,并复制字符串.注意函数strlen返回的是有效字符串长度,不包含完毕符‘\0’.函数strcpy则连‘\0’一同复制.
(4)第四步,返回本对象的引用,目的是为了实现象 a = b = c 这样的链式表达.注意不要将 return *this 错写成 return this .那么可否写成return other 呢?效果不是一样吗?
不可以!因为我们不知道参数other的生命期.有大概other是个暂时对象,在赋值完毕后它即刻消逝,那么return other返回的将是垃圾.
9.7 偷懒的办法处理拷贝构造函数与赋值函数
假如我们实在不想编写拷贝构造函数和赋值函数,又不答应别人利用编译器生成的缺省函数,怎么办?
偷懒的办法是:只需将拷贝构造函数和赋值函数声明为私有函数,不用编写代码.
比方:
class A
{ …
private:
A(const A &a); // 私有的拷贝构造函数
A & operate =(const A &a); // 私有的赋值函数
};
假若有人试图编写以下程序:
A b(a); // 调用了私有的拷贝构造函数
b = a; // 调用了私有的赋值函数
编译器将指出错误,因为外界不可以操作A的私有函数.
9.8 如安在派生类中实现类的基本函数
基类的构造函数、析构函数、赋值函数都不能被派生类担当.假如类之间存在担当关系,在编写上述基本函数时应注意以下事项:
u 派生类的构造函数应在其初始化表里调用基类的构造函数.
u 基类与派生类的析构函数应当为虚(即加virtual)
以上是“高质量C++/C编程指南-第9章-类的构造函数、析构函数与赋值函数(4[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |