题目描述
如下为类型CMyString的声明,请为该类型添加赋值运算符函数。
1 2 3 4 5 6 7 8 9 10
| class CMyString { public: CMyString(char* pData = nullptr); CMyString(const CMystring &str); ~CMyString(void);
private: char* m_pData; };
|
解析
关注点如下:
- 是否把返回值的类型声明为该类型的引用,并在函数结束前返回实例自身的引用(*this)。
- 是否把传入的参数的类型声明为常量引用。
- 是否释放实例自身已有的内存。
- 判断传入的参数和当前的实例(*this)是不是同一个实例。
Show Code
经典,初级解法
1 2 3 4 5 6 7 8 9 10 11 12 13
| CMyString& CMyString::operator = (const CMyString &str) { if(this == &str) return *this; delete []m_pData; m_pData = nullptr;
m_pData = new char[strlen(str.m_pData) + 1]; strcpy(m_pData,str.m_pData);
return *this; }
|
考点
- C++基础语法,如运算符函数、常量引用;
- 对内存泄露的理解
本题源代码
参考资料