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

 

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

 

你可能感兴趣的:(string& str(未初始化) = str1和str(已初始化过) = str1的区别和联系)