【C++】String类拷贝构造函数——浅拷贝优化的三种方式(引用计数)
来源:互联网 发布:2017网络融资骗局大全 编辑:程序博客网 时间:2024/05/15 10:39
这里提供三种优化方式:
1.使用静态变量计数
2.单独开辟计数空间
3.对象和计数变量使用同一连续空间
代码示例:
第一种
class String{public:String(char* pStr = ""):_pStr(new char[strlen(pStr)+1]){strcpy(_pStr, pStr);_pCount++;}String(String& s):_pStr(s._pStr){_pCount++;}//赋值运算符重载只有面对同一个对象,无需重写~String(){if (--_pCount == 0){delete[] _pStr;}}private:char* _pStr;static int _pCount;};
int String::_pCount = 0;
第二种:
使用单独内存的引用计数class String{public:String(char* pStr = ""):_pStr(new char[strlen(pStr) + 1]),_pCount(new int(1)){strcpy(_pStr, pStr);}String(String& s):_pStr(s._pStr){_pCount++;}String& operator=(const String& s){if (_pStr != s._pStr){Delete();_pStr = s._pStr;_pCount = s._pCount;_pCount++;}return *this;}~String(){Delete();}private:void Delete(){if (0 == (--(*_pCount))){delete[] _pStr;delete _pCount;}}private:char* _pStr;int* _pCount;};
第三种:
//在同一空间中使用引用计数—— _pCount ====(int*)(_pStr-4)class String{public:String(char* pStr = ""):_pStr(new char[strlen(pStr) + 5]){*_pStr = 1;_pStr -= 4;strcpy(_pStr, pStr);}String(String& s):_pStr(s._pStr){//++(*((int*)(_pStr - 4)));++GetRefCount();}String& operator=(const String& s){if (_pStr != s._pStr){Delete();_pStr = s._pStr;//_pCount = s._pCount;//_pCount++;++GetRefCount();}return *this;}~String(){Delete();}private:void Delete(){if (0 == (--(GetRefCount()))){delete[] (_pStr-4);//delete _pCount;}}int& GetRefCount(){return *((int*)(_pStr - 4));}private:char* _pStr;};void fun1(){String s1("hello");String s2(s1);s2 = s1;}void fun2(){String s1("hello");String s2(s1);String s3("world");String s4(s3);s3 = s2;}void fun3(){String s1("hello");String s2("world");s2 = s1;}int main(){fun1();fun2();fun3();return 0;}
阅读全文
0 0
- 【C++】String类拷贝构造函数——浅拷贝优化的三种方式(引用计数)
- String类引用计数的浅拷贝
- 【String类浅拷贝的实现】C++:String类引用计数浅拷贝的两种实现
- 【C++】String拷贝(包含深拷贝浅拷贝)以及拷贝构造函数中几种调用的情况
- String类的浅拷贝、深拷贝、引用计数、写时拷贝
- (String)引用计数写的拷贝
- String类详解(浅拷贝,深拷贝,引用计数,写时拷贝)
- String浅拷贝---引用计数
- String类的引用计数的浅拷贝
- 浅拷贝,深拷贝,简洁版的深拷贝,浅拷贝的优化版(引用计数)
- 【C++】String类拷贝构造函数——深拷贝普通版和简洁版
- C++::浅拷贝,深拷贝,引用计数的拷贝,写时拷贝
- 小结 | C++ String类的引用计数的浅拷贝、写时拷贝
- c++拷贝方面的问题(深、浅拷贝,为何拷贝构造函数传const引用)
- String类(深/浅拷贝、引用计数、写时拷贝)
- c++中类的位拷贝与拷贝构造函数(浅拷贝与深拷贝)
- String-引用计数的写时拷贝
- string引用计数的写时拷贝
- Linux gdb debug 常用命令
- Qt设计滑动条
- U3D录音以及保存为wav格式文件
- T
- 判断元素出栈合法性
- 【C++】String类拷贝构造函数——浅拷贝优化的三种方式(引用计数)
- dwt和wavedec区别
- linux下安装配置mysql
- JDBC编程--完成用户注册功能
- (LeetCode) 343. Integer Break
- Maven学习笔记
- Java学习笔记-《Java程序员面试宝典》-第四章基础知识-4.1基本概念(4.1.13)
- phpstudy 在 linux下 安装和操作
- 网络基础知识