有关重载赋值运算符的问题.
看了一下赋值运算符不是很清楚,为什么还要在第一步比较.下面是它的实现
String1 &String1::operator=(const String1&other)
{
if(this==&other)
{
return *this;
}
delete []m_data;
m_data=new char[strlen(other.m_data)+1];
strcpy(this->m_data,other.m_data);
return *this;
}
问题点数:20、回复次数:8Top
1 楼cxc014(有心插柳柳不活,无心栽花花开花?)回复于 2006-03-04 15:18:03 得分 0
为什么还要在第一步比较
=====================
是为了防止在自己跟自己赋值时,可能出现的不必要的语句,或是错误.Top
2 楼windindance(风舞轻扬·白首为功名)回复于 2006-03-04 15:19:51 得分 0
可能会有这种代码:
String1 s="aaa";
s = s;
如果没有if(this==&other)这行的话,就会有问题了。Top
3 楼dx30611(想要clean code)回复于 2006-03-04 15:24:21 得分 0
如果按照c++默认的方式,只传递了字符串的地址,在内存中只有一个字符串空间,是一种浅拷贝,如果要进行深拷贝产生两个相同的字符串就要按照这种方式编写.Top
4 楼ugg(逸学堂(exuetang.net))回复于 2006-03-04 20:13:37 得分 0
if(this==&other)
~~~~~~~~~~~~
防止自己给自己赋值的情况。
楼上windindance,举的例子
String1 s="aaa";
s = s;
也许你说不会不会出现这种情况。
但是
string str = "aaa";
.....
string str1 =str;
....
string str2 = str1;
....
str = str2;// 如果不做处理,这时候经过多步处理,这时候已经不能明确str2原来是从
// str来的。而这时认为给str赋值str2是正确的,其实是错误。
Top
5 楼cunsh(村少)回复于 2006-03-04 20:20:09 得分 0
<<effective c++>> 的条款17 在operator=中检查给自己赋值的情况.Top
6 楼Duwchy(+U)回复于 2006-03-04 21:23:45 得分 0
<高质量C++/C 编程指南〉9.6节有介绍Top
7 楼wqtl_357(Step By Step!)回复于 2006-03-05 19:38:35 得分 0
防止自己给自己赋值的情况。Top
8 楼windywater(超级宇宙无敌大白痴)回复于 2006-03-06 16:55:08 得分 0
大家说得很详细了。Top




