C++ string copy的追根挖底!看看你理解的层度是那层

来源:互联网 发布:java项目http转https 编辑:程序博客网 时间:2024/05/11 15:05

相信写过C++的人肯定用过:

string str2(“11”);

string str1 = str2;


现在就让我深入挖掘下string str1 = str2;所包含的内容。

第一层:

把str2的内容“11”复制给了str1

第二层:

先定义了str1对象,把str2对象赋值给str1

第三层:

string类型为什么能够赋值,原来string实现了赋值运算符重载。

  1. String & String::operate=(const String &other)  
  2. {  
  3.     if (this == &other)  
  4.         return *this;  
  5.     delete m_data;  
  6.     m_data = new char[strlen(other.data)+1];  
  7.     strcpy(m_data, other.data);  
  8.     return *this;   // 返回的是 *this的引用,无需拷贝过程  
  9. }  
第四层:

理解到string str1 = str2;的伪代码可以写为:

string str1;

str1.=(str2)

str1=str2的过程分析如下:

1、创建string&的临时变量tmp

2、调用赋值运算符重载函数

3、把str2、str1依次压栈,执行函数

4、返回值初始化tmp

5、销毁tmp

第五层:

我不理解:

  1. String & String::operate=(const String &other)  
这重载函数完全不需要返回值,为什么要返回!

请大神帮忙解释下!

0 0