题目:类CMyString的声明如下,请实现其赋值运算符的重载函数,要求异常安全,即当对一个对象进行赋值时发生异常,对象的状态不能改变。

class CMyString
{
public:CMyString(char* pData = NULL);CMyString(const CMyString& str);CMyString& operator = (const CMyString& str);~CMyString();private:char* m_pData;
};

答:

//1、可能有异常
CMyString& CMyString::operator = (const CMyString& str)
{if (this != &str){delete [] m_pData;m_pData = NULL;m_pData = new char[strlen(str.m_pData) + 1]; //这里内存分配不成功,之前的数据已经释放,不安全
        strcpy(m_pData, str.m_pData);}return *this;
}//2、异常安全
CMyString& CMyString::operator = (const CMyString& str)
{if (this != &str){CMyString tmp(str);char *pTmp = m_pData;m_pData = tmp.m_pData;tmp.m_pData = pTmp;}return *this;
}

转载于:https://www.cnblogs.com/venow/archive/2012/09/01/2666873.html

类的赋值运算符的重载函数相关推荐

  1. C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝

    关键词:构造函数,浅拷贝,深拷贝,堆栈(stack),堆heap,赋值运算符 摘要:     在面向对象程序设计中,对象间的相互拷贝和赋值是经常进行的操作.     如果对象在申明的同时马上进行的初始 ...

  2. C++:运算符重载与类的赋值运算符重载函数

    目录 章节知识架构 一.运算符重载 1. 运算符重载的基本概念 代码段1 2.关于运算符重载的重要语法细则 二.运算符重载在类中的使用 三.类的默认成员函数:=重载函数(赋值运算符重载) 1.自定义= ...

  3. 【C/C++】拷贝构造函数 赋值运算符的重载

    1.拷贝构造函数 1.1拷贝构造函数基本形式 就类对象而言,相同类型的类对象是通过拷贝构造函数来在对象初始化期间完成整个复制过程的. 拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它的 ...

  4. C++运算符重载(类内、外重载)

    1.概念   运算符的重载,实际是一种特殊的函数重载,必须定义一个函数,并告诉C++编译器,当遇到该运算符时就调用此函数来行使运算符功能.这个函数叫做运算符重载函数(常为类的成员函数).   用函数的 ...

  5. gmock学习02---编写自己的Matcher与如何让编译器识别被mock的重载函数

    本文目的 gmock框架中自带Matcher只针对c++内置类型,如string,int,float等等,有时候无法满足项目要求,所以需要编写自己的Matcher对象.本文介绍如何使用gmock提供的 ...

  6. 编写自己的Matcher与如何让编译器识别被mock的重载函数

    本文目的 gmock框架中自带Matcher只针对c++内置类型,如string,int,float等等,有时候无法满足项目要求,所以需要编写自己的Matcher对象.本文介绍如何使用gmock提供的 ...

  7. 重载函数与虚函数的区别

    重载函数与虚函数的区别: 重载函数只要求函数有相同的函数名,并且重载函数是在相同作用域中定义的名字相同的不同函数.而虚函数不仅要求函数名相同,而且要求函数的签名.返回类型也相同.也就是说函数原型必须完 ...

  8. 类中赋值运算符重载函数

    声明一个字符串类,为这个类型添加赋值运算符 class MyString { public://构造函数MyString(char* pData = NULL);//构造函数MyString(cons ...

  9. c++类指针赋值表达式必须是可修改的左值_C++学习刷题8--复制构造函数和赋值运算符重载函数...

    一.前言 本部分为C++语言刷题系列中的第8节,主要讲解这几个知识点:复制构造函数和赋值运算符重载函数.欢迎大家提出意见.指出错误或提供更好的题目! 二.知识点讲解 知识点1:复制构造函数 1.当依据 ...

最新文章

  1. 目标检测Anchor的What/Where/When/Why/How
  2. bestcoder #71 1003 找位运算的最大生成树
  3. iOS中 加强日志输出 开发技术总结
  4. matlab 正在等待响应标头。可能服务器没有响应,或者 weboptions.Timeout,Expect:100-continue
  5. rpm安装两个mysql_MySQL通过rpm安装及其单机多实例部署
  6. 如何解决机器学习中的数据不平衡问题?
  7. Python 抓取图片
  8. 互联网架构,如何进行容量设计?
  9. F - 数据结构实验之栈与队列六:下一较大值(二)
  10. 【50】了解new和delete的合理替换时机
  11. CentOS 7, apm+xcache, rpm包, php module
  12. 机器学习数据不平衡问题及其解决方法
  13. 2019数据安装勾选_【在发票平台确认签名后,为什么在电子税务局增值税申报表上没有自动显示进项数据?】一张发票的“有效税额”是否可以分两个月抵扣?...
  14. 数字调制系统工作原理_图文讲解液压系统溢流阀分类与工作原理
  15. 网络安全——D模块答题模式
  16. windows 实现 linux soft link,Linux中的软链接(Soft Link)和硬链接(Hard Link)的区别...
  17. Chrome和360浏览器“无法翻译此网页”解决方法
  18. django oscar_赢得奥斯卡奖之后会发生什么
  19. 模糊测试框架 Sulley 使用手记
  20. 3D模型欣赏:黑色的巴斯泰托女神【3D游戏建模教程】

热门文章

  1. python开发需要掌握哪些知识-人工智能需要学习哪些专业课程知识?
  2. python散点图点的大小-Python散点图。 标记的大小和样式
  3. python绘制3d图-python3利用Axes3D库画3D模型图
  4. python语言编程入门先学什么-初学者先学习python语言还是C语言
  5. python有什么作用-大数据学习之python语言有什么作用?
  6. python的软件叫什么-django中的app是指什么
  7. 怎样看python源代码-如何直接从IDE读取Python源代码
  8. python中的装饰器有哪些-python中的装饰器详解
  9. python绘制条形图-python matplotlib库绘制条形图练习题
  10. 自学python可以找到好的工作吗-通过自学python能找到工作吗