对象引用有关问题*this

对象引用问题*this
String&   String::   operator   =(const   String&   other)
{
if(this   !=&other)
{
delete   m_data;
int   len=strlen(other.m_data);
m_data=new   char   [len+1];
strcpy(m_data,other.m_data);

}
return   *this;
}
//这样函数,最后*this
//是否表示就是返回原对象整个值呢?

------解决方案--------------------
返回的是该对象的引用。这样可以结合赋值表达式进行链式操作,使得某些写法在语法上看起来更加自然,更加接近内建类型;简化代码书写。
比如:
String s,s1,s2,s3;
s3 = "example ";
s=s1=s2=s3;
这样三个字符串都被赋值为同一个串,简洁明了。



------解决方案--------------------
如果this !=&other,你的对象里的m_data的值就被彻底改变了,然后跳出if语句,运行到*this,这时因为你的对象的m_data已经改变了,所以返回的当然不是原来的原对象了。
为什么这里要加this != &other呢?就是为了防止你做出String x; x = x;这样诡异的事情来。

另外要说明的一点是:先别急这delete[] m_data;(你这里都写错了),如果你先delete掉,后面的m_data = new char[len + 1];由于内存不够抛出std::bad_alloc怎么办?你的对象的值都被改变了!C++里有一种概念叫异常安全性,现在很多人在实现对象的operator=时都使用了copy && swap技术,在一个临时对象上做任何事情,然后最后和这个临时对象交互一下,因为在临时对象上的任何操作都不会影响真正向操作的那个对象,当这些操作在临时对象上都正确完成后,再跟临时对象交换一下,这里当然swap交换函数必须不能抛出异常啦!