首页 / 软件开发 / C++ / 高质量C++/C编程指南-第9章-类的构造函数、析构函数与赋值函数(4)
高质量C++/C编程指南-第9章-类的构造函数、析构函数与赋值函数(4)2007-05-06林锐类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返回的是有效字符串长度,不包含结束符‘