C++赋值运算符函数
为类添加赋值运算符函数:
类型定义
class CMyString { public: CMyString(char *pData = NULL); CMyString(const CMyString &str); ~CMyString(void); CMyString &operator=(const CMyString &); private: char *m_pData; };
要点:
1、返回值类型为该类型的引用,并在函数结束前返回实例自身的引用(即 *this);
2、是否把传入的参数声明为常量引用【const CmyString &str】;
3、是否释放自身已有内存,否则会造成“内存泄漏”;
4、是否判断参数与当前示例是指向的同一个对象;
解法:
/* 适用于初级C++程序员的解法 */ CMyString &CMyString::operator=(const CMyString &str) { //首先检测两个指针是否指向同一个对象 if (this == &str) return *this; //释放原内存 delete []m_pData; m_pData = NULL; //重新申请内存 m_pData = new char[strlen(str.m_pData) + 1]; strcpy(m_pData,str.m_pData); //谨记:返回*this return *this; } /* 适用于高级C++程序员的解法 */ CMyString &CMyString::operator=(const CMyString &str) { if (this != &str) //确保不指向同一个实例 { CMyString strTemp(str); char *pTemp = strTemp.m_pData; //指针指向需要更换的对象 //strTemp.m_pData指向原来的对象,确保内存不足时可以找到原来对象的值 strTemp.m_pData = m_pData; m_pData = pTemp; //更换原对象的值 } //自动调用strTemp的析构函数,销毁strTemp对象并回收pTemp的内存 return *this; }