剑指offer面试题1
来源:互联网 发布:广州java招聘 编辑:程序博客网 时间:2024/06/05 19:58
赋值运算符函数
题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数。
class CMyString{public : CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString(void);private : char* m_pData;};
解答思路如下:
传统写法:
//s1 = s2CMyString& CMyString::operator=(const CMyString& str){ if (this != &str)//判断自赋值 { //这里选择一个临时变量来存放字符串的地址, //而不是先释放空间,然后再开辟新的空间。 //是因为考虑了异常安全性,如果先释放旧空间,再开辟新的空间, //由于用new去开辟新的空间,如果失败,那么就会抛异常出去,而你又释放了旧空间。 //想一下,这个函数是为了将s2赋值给s1,在这种情况下没有赋值成功,而且也破坏了s1,得不偿失 char* tmp = new char[strlen(str.m_pData) + 1]; strcpy(tmp, str.m_pData); delete[] m_pData; m_pData = tmp; } return *this;//为了支持类似(s1=s2=s3)这种链式赋值}
现代写法:
CMyString& CMyString::operator=(CMyString& str){ if (this != &str) { CMyString tmp(str.m_pData);//调构造函数 std::swap(m_pData, tmp.m_pData); } return *this;}
0 0
- 剑指offer面试题1
- 剑指offer 面试题1
- 【面试题】剑指offer 1
- 剑指offer面试题1
- 剑指offer 面试题
- 剑指offer面试题
- 剑指offer面试题总结
- 剑指offer面试题06
- 剑指offer面试题 04
- 剑指offer 面试题07
- 剑指offer面试题08
- 剑指offer面试题42
- 剑指offer面试题3
- 剑指offer面试题4
- 剑指offer面试题5
- 剑指offer面试题6
- 剑指offer面试题7
- 剑指offer面试题8
- LeetCode #8 String to Integer (atoi)
- JavaWeb工程中web.xml基本配置
- Android的消息处理机制
- audio 网址
- 线程安全与锁优化
- 剑指offer面试题1
- 21分钟 MySQL 入门教程
- 安卓学习路线
- C语言常量定义方法小结
- RTEMS 开发环境搭建(基于RSB)及bset文件配置初探
- static关键字(java基础)
- 各种gpio模式比较
- GPLT L2-010. 排座位【并查集】
- 关于C++ const 的全面总结