博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
{面试题1: 赋值运算符函数}
阅读量:4600 次
发布时间:2019-06-09

本文共 1881 字,大约阅读时间需要 6 分钟。

From 剑指Offer 何海涛 著

#include 
#include
class CMyString { public: CMyString(char *pData = NULL); CMyString(const CMyString &other); ~CMyString(void); public: CMyString& operator=(const CMyString &other); private: char *m_pData;#if defined(NDEBUG) friend bool isEqual(const CMyString &left, const CMyString &right);#endif };CMyString::CMyString(char *pData) { if(pData != NULL) { size_t len = strlen(pData); m_pData = new char[len+1]; strcpy(m_pData, pData); } else { m_pData = new char[1]; *m_pData = '\0'; }}CMyString::CMyString(const CMyString &str) { size_t len = strlen(str.m_pData); m_pData = new char[len+1]; strcpy(m_pData, str.m_pData);}CMyString::~CMyString() { delete[] m_pData; m_pData = NULL;}CMyString& CMyString::operator=(const CMyString &other) { if(this != &other) { CMyString tmp(other); // 借助临时实例, 实现动态内存的释放, 符合 异常安全性(Exception Safety) 原则 char *pData = tmp.m_pData; tmp.m_pData = m_pData; m_pData = pData; } return *this;}#ifdef NDEBUGbool isEqual(const CMyString &left, const CMyString &right) { if(left.m_pData != right.m_pData && !strcmp(left.m_pData, right.m_pData)) { return true; } return false;}#endif

测试集:

void test(const CMyString &left, const CMyString &right) {    #if defined(NDEBUG)    std::cout << std::boolalpha << isEqual(left, right) << std::endl;    #endif}int main(int argc,char *argv[]) {    char pData[] = "Just For Test!";    CMyString str1(pData);    str1 = str1;         // 是否支持自赋值        CMyString str2;    CMyString str3;    str3 = str2 = str1;  // 是否支持连续赋值        test(str1, str2);    test(str2, str3);        return 0;}

异常安全性 原则: 对实例操作过程的过程中, 即便发生了异常, 实例仍能保持有效状态。

转载于:https://www.cnblogs.com/long3216/p/4438450.html

你可能感兴趣的文章
Lync Server 2013 实战系列之六:标准版-安装和更新LyncServer 系统
查看>>
MariaDB日志审计 帮你揪出内个干坏事儿的小子
查看>>
Reporting Services目录临时数据库文件存在
查看>>
一个Windows Mobile, Windows Embedded CE工程师的找工经历(一)
查看>>
终于有了MSDN上的Blog
查看>>
PHPUnit学习03---使用Mock对象解决测试依赖
查看>>
java类型与Hadoop类型之间的转换
查看>>
允许SQL Server 2005远程连接
查看>>
微软为asp.net ajax和jquery创建了CDN
查看>>
Chris:怎样成为一名Android应用开发
查看>>
和菜鸟一起学linux总线驱动之初识spi驱动数据传输流程【转】
查看>>
WorkFlow设计篇Step.4—异常处理(续)-WF4.0
查看>>
深入浅出 React Native:使用 JavaScript 构建原生应用
查看>>
RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-> Web版本新增新的用户权限设置界面效率更高、更规范...
查看>>
Foundations of Python Network Programming - 读书笔记系列(3) - Email Services
查看>>
Oracle下建立dblink时的权限问题
查看>>
chrome浏览器,调试详解,调试js、调试php、调试ajax
查看>>
jQuery Ajax 回顾
查看>>
点在多边形内算法,C#判断一个点是否在一个复杂多边形的内部
查看>>
如何在移动设备上搭建服务器承载自己的全景作品?
查看>>