实现异常安全性(55)
来源:互联网 发布:车牌号识别 算法 编辑:程序博客网 时间:2024/05/17 22:18
题目:类CMyString的声明如下:
class CMyString
{
public:
CMyString(char* pData = NULL);
CMyString(const CMyString& str);
~CMyString(void);
CMyString& operator = (const CMyString& str);
class CMyString
{
public:
CMyString(char* pData = NULL);
CMyString(const CMyString& str);
~CMyString(void);
CMyString& operator = (const CMyString& str);
private:
char* m_pData;
};
请实现其赋值运算符的重载函数,要求异常安全,即当对一个对象进行赋值时发生异常,对象的状态不能改变。
/* Name: Copyright: Author: Date: 23-06-11 17:39 Description: :类CMyString的声明如下:class CMyString{public:CMyString(char* pData = NULL);CMyString(const CMyString& str);~CMyString(void);CMyString& operator = (const CMyString& str);private:char* m_pData;};请实现其赋值运算符的重载函数,要求异常安全,即当对一个对象进行赋值时发生异常,对象的状态不能改变。*/#include<iostream>#include<iomanip>using namespace std;class CMyString { public: CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString(void); CMyString& operator = (const CMyString& str); private: char* m_pData; };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;}// 这是针对数组的情况( char* m_pData 是一个字符数组) 自动获得自我赋值安全性。//异常安全性指:指针指向一块不存在的内存 class widget{ ... private: Bitmap *pb;}; Widget & Widget::operator=(const Widget &rhs){ if(this==&rhs) return *this; delete pb; pb=new Bitmap(*rhs.pb); return *this;}//以上代码不具备异常安全性,如果“new Bitmap”导致异常,会有一个指针指向一块被删除的BitmapWidget & Widget::operator=(const Widget &rhs){ Bitmap *pOrig=pb; pb=new Bitmap(*rhs.pb); delete pOrig; return *this;} //以上代码自动获得自我赋值安全性,并且具备异常安全性 int main(){ system("pause"); return 0;}
- 实现异常安全性(55)
- C++中的异常安全性
- C++中的异常安全性
- C++ 中的异常安全性
- c++中的异常安全性
- C++的异常安全性
- 使用 XSS4J 实现 XML 安全性(XML)
- 一些库函数实现(注意安全性检查)
- Java集合(实现类线程安全性)
- 安全性检验与异常抛出
- java如何实现安全性
- [C++再学习系列] 异常安全性
- 考虑异常安全性的赋值语句
- FTP服务器如何实现安全性
- FTP服务器如何实现安全性
- .Net Remoting安全性与实现
- WS安全性(3)
- mysql(mariadb)安全性
- Embedded software 5 most destructive bugs
- ASP.NET(三) Web开发——常用服务器控件
- 求救啊,逆波兰式
- python 的method obj和function obj
- static C/C++剖析
- 实现异常安全性(55)
- C语言中long long的用法 C++ __int64用法 __int64的printf问题
- 搭建javaweb开发环境(jdk/tamcat/maven)
- 快速排序中的堆栈深度
- 黑马程序员——基础加强(2)
- 凯撒密码 与 维吉尼亚密码
- 在 tomcat 中 安装 solr
- Rest API 开发 学习笔记
- Linux Boot Sequence