string str1("abc");
string& str = str1; //①
string str2("cba");
str = str2; //②
标题就是①和②的区别和联系,因为有时候容易混淆,其实仔细看也就明了了,不过既然混淆过也就写出来。
上面①重载了该类的赋值操作符,只是没有进行内部成员赋值的操作,仅仅是给了对象的位置,仅仅做引用的初始化;
上面②也重载了该类的赋值操作符,但是进行了内部成员的空间清理并且作了新的分配和赋值。
①②各自对应着自己的代码操作,看下面:
44.String & String::operator=(const String &other)
45.{
46. if (this == &other)
47. return *this;
48.
49. delete []m_data;
50.
51. int len = strlen(other.m_data);
52. m_data = new char[len+1];
53. strcpy(m_data,other.m_data);
54.
55. return *this;
56.}
46--47就是①的代码操作;49--55就是②的代码操作。