标签:c++
题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数。class CMyString { public: CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString(void); CMyString& operator = (const CMyString& str); private: char* m_pData; };
解答:
/*把参数申明为引用可以避免调用复制构造函数,并且const引用使得在函数内不会改变引入实例的状态。此外,只有返回一个引用,才可以允 许连续赋值。*/ CMyString& CMyString::operator =(const CMyString &str) { if (this==&str) /*判断传入的参数和当前的实例(*this)是不是同一个实例。如果是同一个,则不进行赋值操作,直接返回。如果事先不判断就进行赋值,那么在释放实例 自身的内存的时候就会导致严重的问题:当*this和传入的参数是同一个实例时,那么一但释放了自身的内存,传入的参数的内存也同时被释放了,因此再也找 不到需要赋值的内容。*/ return *this; delete []m_pData;/*如果我们忘记在分配新内存之前释放自身已有的空间,程序将出现内存泄露。*/ m_pData=NULL; m_pData=new char[strlen(str.m_pData)+1]; strcpy(m_pData,str.m_pData); return *this; }
标签:c++
原文地址:http://blog.csdn.net/lsh_2013/article/details/45177861