面试题1:赋值运算符函数

/*面试题1为如下CMySting的声明,添加赋值运算符函数。*/class CMyString{public: CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString(void); CMyString& operator = (const CMyString& str); void Print(); private: char* m_pData;};/*注意事项:1.是否把返回值类型声明为该类型的引用,并在函数结束前返回实例自身的引用(即*this)。2.是否把传入的参数的类型声明为常量引用。3.是否释放实例自身的内存。4.是否判断传入的参数和当前的实例是不是同一个实例。经典的解法如下: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); return *this;}*///考虑异常安全性的解法:CMyString& CMyString::operator =(const CMyString &str){if(this != &str){CMyString strTemp(str);char *pTemp = strTemp.m_pdata;strTemp.m_pdata = m_pdata;m_pdata = pTemp;}return *this;}/*由于strTemp是一个局部变量,程序运行到if的外面时也就出了该变量的作用域,就会自动调用strTemp的析构函数,,把strTemp.m_pdata所指向的内存释放掉。由于之前strTemp.m_pdata指向的内存就是实例之前m_pdata的内存,这相当于调用析构函数释放实例的内存。测试用例包含了三种情况:把一个实例赋值给另一个实例;把一个实例赋值给自己;连续赋值。 */

不敢面对自己的不完美,总是担心自己的失败,

面试题1:赋值运算符函数

相关文章:

你感兴趣的文章:

标签云: