C++异常安全的赋值运算符重载 【微软面试100题 第五十五题】
题目要求:
类CMyString的声明如下:
class CMyString { public: CMyString(char *pData=NULL); CMyString(const CMyString &str); ~CMyString(void); CMyString &operator=(const CMyString &str); private: char *m_pData; };
请实现其赋值运算符的重载函数,要求异常安全,即当对一个对象进行赋值时发生异常,对象的状态不能改变。
参考资料剑指offer第1题。
题目分析:
要异常时,对象状态不改变,则,我们先创建一个临时实例,再交换临时实例和原来的实例。
CMyString &CMyString::operator=(const CMyString &str) { if(this!=&str) { CMyString strTemp(str); char *p = strTemp.m_pData; strTemp.m_pData = m_pData; m_pData = p; } }
很多时候不是我们做不好,而是没有竭尽全力......
posted on 2014-11-11 18:35 tractorman 阅读(201) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?