20140702 赋值构造函数的形参为什么一定用引用。string类的赋值运算函数的注意点

1、复制构造函数为什么一定要用引用,而不是用值

类名::复制构造函数(类名&引用名)
传递引用,可以避免复制,如果一个数据相当大的化,进行复制会浪费很多时间的。
类名::复制构造函数(类名 变量名)
在调用构造函数的时候参必须给的是一份拷贝,那么就到一个循环调用。在调用拷贝构造函数之前,必须拷贝构造一个对象。于是进入了递归调用

image

2、string类的赋值运算符函数的注意点

String & String::operator=(const String &other)//1、是否把返回类型声明为string类的引用,是否将传入的参数设置为常量引用 
 {
 if(this==&other)//2、是否考虑传入参数和当前实例(*this)是不是同一实例
      return *this;
 delete [] m_data;//3、是否释放自身的内存
 m_data=new char[strlen(other.m_data)+1];//新申请空间,深拷贝
 strcpy(m_data,other.m_data);
 return *this;//是否把返回类型声明为string类的引用
 }
posted @ 2014-07-01 19:20  yexuannan  阅读(402)  评论(0编辑  收藏  举报