【c++】异常安全深赋值
2015-06-05 17:00
417 查看
// 深拷贝,异常安全的深赋值 #include <iostream> #include <string.h> using namespace std; class String { public: String(const char *str = " ") { m_data = new char[strlen(str) + 1]; strcpy(m_data, str); } String(const String &s) { m_data = new char[strlen(s.m_data) + 1]; strcpy(m_data, s.m_data); } // 异常安全的深赋值 // 一般深赋值要先释放原来m_data的空间,若原来空间里的东西还有用,就会带来很大的麻烦 // 这种深赋值可以避免出现那样的情况 String& operator=(const String &s) { if (&s != this) { String tmp(s.m_data);// 用要赋值的数据重新构造出一个对象 char *ptmp = m_data;// 交换指针的指向 m_data = tmp.m_data; tmp.m_data = ptmp; } return *this; } ~String() { delete[]m_data; } public: void print() { cout << m_data << endl; } private: char *m_data; }; int main() { String s("hello"); s.print(); String s1(s); s1.print(); String s2; s2 = s1; s2.print(); return 0; }
相关文章推荐
- 《爱编程,爱c++第十期-第三章-c++简单程序设计》
- ZH奶酪:C语言中malloc()和free()函数解析
- 归并排序
- 【C++】智能指针auto_ptr的简单实现
- 装饰者模式及C++ 2
- 如何在C语言中巧用正则表达式
- C++ new operator, delete operator, operator new, operator delete, new placement
- [C++11] lambda表达式
- 九度oj 题目1185:特殊排序
- C++运算法优先级
- 好玩的代码之C++实现CPU满载
- 设计模式C++实现(11)——装饰模式
- c++静态成员函数访问非静态成员变量
- c++ 时间类型详解 time_t
- C++--编译器工作原理
- C++--编译器工作原理
- Effective C++ 条款43
- C++ using namespace std 详解
- 图文例解C++类 4000 的多重继承与虚拟继承
- c++hash_map