不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

剑指offer_面试题1_赋值运算符函数

题目描述

如下为类型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++基础语法,如运算符函数、常量引用;
  • 对内存泄露的理解

本题源代码

参考资料

------ 本文结束------
如果本篇文章对你有帮助,可以给作者加个鸡腿~(*^__^*),感谢鼓励与支持!