请教关于自赋值的问题!
请问在程序中如果出现自赋值的情况将出现什么危害?
一般情况下怎么样才能避免自赋值。
请帮小弟看看下面的这段程序,他会出现自赋值的问题吗?如果出现,怎么写就能避免自赋值的出现?谢谢各位。
unsigned tring::length()const
{
return cstrLen(buffer);
}
void tring::operator=(const tring&right)
{
const unsigned rightLength=right.length();
if(right.length()>=buflen)
{
delete []buffer;
buflen=1+rightLength;
buffer=new char[buflen];
assert(buffer!=0);
}
unsigned i=0;
for(;right.buffer[i]!='\0';i++)
buffer[i]=right.buffer[i];
buffer[i]='\0';
}
问题点数:0、回复次数:2Top
1 楼RookieStar(Yukon)回复于 2003-09-04 12:54:18 得分 0
昨天好像问过了吧。。。再说一遍:
一般对于自赋值只需在重载的operator =函数中加上
if (this==&right)
return *this;
你这里由于返回void,故return;
想要详细研究一下的可以去看Scott Meyers《Effective C++》中的相关章节!!!Top
2 楼sevecol(sevecol.blogone.net)回复于 2003-09-04 12:57:05 得分 0
这里要注意的一点就是如果从载了&的操作符,那么if (this==&right)就要小心了。Top



