string& str(未初始化) = str1和str(已初始化过) = str1的区别和联系

来源:互联网 发布:广州趣丸网络 收购 编辑:程序博客网 时间:2024/05/21 17:27

 

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就是②的代码操作。