String--引用计数写时拷贝
来源:互联网 发布:app软件操作说明书 编辑:程序博客网 时间:2024/05/17 15:19
写时拷贝
class String{public: String(char* str = "") { _str = new char[strlen(str) + 1]; _refCountPtr = new int(1); strcpy(_str, str); } ~String() { if (--*_refCountPtr = 0) { delete[] _str; delete _refCountPtr; } } String(String& s) :_str(s._str) , _refCountPtr(s._refCountPtr) { (*_refCountPtr)++; } String& operator = (const String& s) { if (_str != s._str) { if (--(*_refCountPtr) == 0) { delete[] _str; delete _refCountPtr; } _str = s._str; _refCountPtr = s._refCountPtr; (*_refCountPtr)++; } return *this; } void CopyOnWrite(char ch) { if (*_refCountPtr > 1) { char* newStr = new char[_capacity + 1]; strcpy(newStr, _str); (*_refCountPtr)--; _str = newStr; _refCountPtr = new int(1); } } void PushBack(char ch) { CopyOnWrite(ch); if (_size == _capacity) { Expand(2 * _capacity); } _str[_size++] = ch; _str[_size] = '\0'; } void Expand(size_t n) { if (n > _capacity) { _str =(char*) realloc(_str, n + 1); assert(_str); _capacity = n; } } char& operator[](size_t pos) { CopyOnWrite(pos); return _str[pos]; } char operator[](size_t pos)const { return _str[pos]; }private: char* _str; size_t _size; size_t _capacity; int* _refCountPtr;};
阅读全文
0 0
- String--引用计数写时拷贝
- String-引用计数的写时拷贝
- string引用计数的写时拷贝
- string类的写时拷贝与引用计数
- String类引用计数的写时拷贝
- string类的引用计数的写时拷贝分析
- string类的写时拷贝与引用计数
- (String)引用计数写的拷贝
- String类---深拷贝,简洁深拷贝,引用计数拷贝,写时拷贝
- 引用计数+写时拷贝
- 引用计数写时拷贝
- 引用计数写时拷贝
- 引用计数写时拷贝
- 引用计数+写时拷贝
- 引用计数--写时拷贝
- 深浅拷贝&引用计数写时拷贝
- String类详解(浅拷贝,深拷贝,引用计数,写时拷贝)
- String类的浅拷贝、深拷贝、引用计数、写时拷贝
- 数据库基础知识学习
- Vue Prop使用
- Spring bean的生命周期
- springmvc---web.xml的配置文件
- 基于SSM的RBAC权限系统(5)-利用ajax,JQuery实现动态搜索
- String--引用计数写时拷贝
- java从入门到放弃
- HDU6033 Add More Zero(取对数)
- RN面试要点
- SQL 之 lateral view explode()
- Angular移除不必要的$watch之性能优化
- MFC之CAsyncSocket详解
- HDU-6044 Limited Permutation(计数)
- leetcode 516. Longest Palindromic Subsequence 最大回文子序列