【C++】引用计数
2016-04-22 13:06
483 查看
#include <iostream> using namespace std; class String { public: String(const char* str) :_str(new char[strlen(str) + 5]) { _str += 4; strcpy(_str, str); _GetRefCount(_str) = 1; } String(const String& s) :_str(s._str) { ++_GetRefCount(_str); } ~String() { _Release(); } String& operator=(const String& s) { if(_str != s._str) { _Release(); _str = s._str; ++_GetRefCount(_str); } return *this; } private: int& _GetRefCount(char* _ptr)//引用计数 { return *((int*)(_ptr - 4)); } void _Release()//释放内存 { if(--_GetRefCount(_str) == 0) { delete[] (_str - 4); } } private: char* _str; }; void Test1() { String s1("aaaaaa"); String s2(s1); } void Test2() { String s1("aaaaaa"); String s2(s1); String s3("bbbbbbbb"); s1 = s3; } int main() { //Test1(); Test2(); return 0; }
Test1:s2._str指向s1._str, s2的引用计数变为2
Test2:s1._str指向s3._str, s2的引用计数变为1
s3的引用计数变为2
相关文章推荐
- VS2010添加附加头文件和附加库方法
- C++注释规范
- C++语言实现的WebService开发库—gsoap应用介绍
- 二叉树的简单递归实现(创建,遍历,高度,大小)
- C++中头文件相互包含与前置声明
- c++ vector(向量)使用方法详解
- C++第5次上机实验
- C++实验四
- C++第5次上机作业
- Eclipse IDE for C/C++ 配置
- C++第4次实验项目2-学生类
- c++第四次试验——作业
- C++第4次实验
- C++第4次试验——项目二
- c++第四次实验(项目2——学生类)
- c++第4次实验
- C++第四次实验
- C++作业4
- C++ 第4次上机实验报告-学生类
- C++第四次上机实验—学生类