剑指offer题1_赋值运算符函数
2018-01-03 19:16
253 查看
一.题目:
如下为类型CMyString的声明,请为该类型添加赋值运算符函数。class CMyString { public: CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString(void); private: char* m_pData; }
二.分析:
1.是否返回值的类型声明为该类型的引用,并在函数结束前返回实例自身的引用(即*this)。2.是否把传入的参数的类型声明为常量引用。
3.是否释放实例自身已有的内存。
4.是否判断传入的参数和当前的实例(*this)是不是同一个实例。
三.答案:
1.经典的解法,适合初级程序员: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; }
2.由于new char可能会引起异常抛出,如下有两种为考虑异常安全性的方法:
(1)先new再进行delete:
(2)利用局部变量实现:
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; }
相关文章推荐
- 剑指offer——面试题1:赋值运算符函数
- 剑指offer--赋值运算符函数
- 剑指offer 面试题1 赋值运算符函数
- 剑指Offer之赋值运算符函数解析
- 剑指offer——赋值运算符函数
- 剑指offer面试题之赋值运算符函数
- 剑指Offer_面试题01_赋值运算符函数
- 【面试题】剑指Offer-49-模拟实现atoi()函数
- 【剑指offer】第一题:赋值运算符
- 【剑指offer】面试题 30:包含 min 函数的栈
- 剑指offer 面试题1:赋值运算符
- [剑指Offer-字符串]请实现一个函数用来找出字符流中第一个只出现一次的字符。
- 剑指offer——题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
- 【剑指offer】实现一个函数来替换字符串中的空格
- 【剑指offer】面试题1:赋值运算符函数
- leetcode 8: String to Integer (myAtoi,C库函数atoi模拟) (剑指offer 面试题49) 解题报告
- 【剑指Offer学习】【面试题21:包含min 函数的钱】
- 【剑指 offer】(二十一)—— 包含 min 函数的栈
- 剑指offer第1题 赋值运算符重载
- 【剑指offer】第三十题(包含 min 函数的栈) 和 第三十一题(栈的压入、弹出序列)