【c++】引用计数
2015-06-05 19:24
537 查看
#include <iostream> #include <string.h> using namespace std; class String; // 封装一个计数器的类来维护,可以隐藏起来,即用户不必关心是如何实现的 class String_Rep { friend class String; public: String_Rep(const char *str = " ") :count(0) { m_data = new char[strlen(str) + 1]; strcpy(m_data, str); } ~String_Rep() { delete[]m_data; } public: void increment() { count++; } void decrement() { if (--count == 0) { delete this;// 哪一个rep的count为0了释放当时的rep } } private: char *m_data; int count; }; ////////////////////////////////////////////////////////////////////// class String { public: String(const char *str = " ") :rep(new String_Rep(str)) { rep->increment(); } String(const String &s) :rep(s.rep) { rep->increment(); } String& operator=(const String &s) { if (this != &s) { rep->decrement();// 迭代器 rep = s.rep; rep->increment(); } return *this; } ~String() { rep->decrement(); } public: void print()const { cout << rep->m_data << endl; } private: String_Rep *rep;// 句柄 }; int main() { String s1("hello"); String s2; s2 = s1; String s3("world"); String s4; s4 = s3; s1.print(); s2.print(); s3.print(); s4.print(); return 0; }
相关文章推荐
- C++程序设计 - Week 5 继承与派生
- C语言中 内存的申请与释放
- MFC LNK 2005错误
- vs2010中点击新建项,为c++头文件和cpp文件,添加文件头注释
- C语言字符串函数大全
- 【c++】浅拷贝成功__count解决
- C++的字符串分割函数
- c++11新特性for循环
- Python C++扩展
- c++类中特殊数据类型成员变量的初始化
- C语言字符数组的初始化
- C++中“已经在 test.obj 中定义”的错误
- n阶多项式拟合与n阶矩阵求逆的C语言实现
- 设计模式C++描述----11.组合(Composite)模式
- freopen - C/C++文件输入输出利器
- Cppcheck
- efficient c++,单线程内存池
- C++对象模型:第2章(1)-构造函数
- 【c++】异常安全深赋值
- 《爱编程,爱c++第十期-第三章-c++简单程序设计》