写时拷贝
来源:互联网 发布:Linux80端口被占用 编辑:程序博客网 时间:2024/06/04 00:23
写时拷贝:引入一个计数器,每片不同内容的空间上都由一个计数器组成,在构造第一个类指向时,计数器初始化为1,之后每次有新的类也指向同一片空间时,计数器++;在析构时判断该片空间对应计数器是否为1,为1则执行清理工作,大于1则计数器-1。如果有需要进行增删等操作时,再拷贝空间完成,有利于提高效率。
#include<iostream>
using namespace std;
class String
{
public:
String(char* str = "")
:_str(new char[strlen(str) + 1])
, _refCount(new int(1))
{
strcpy(_str, str);
}
String(String& s)
{
_str = s._str;
_refCount = s._refCount;
++(*_refCount);
}
{
public:
String(char* str = "")
:_str(new char[strlen(str) + 1])
, _refCount(new int(1))
{
strcpy(_str, str);
}
String(String& s)
{
_str = s._str;
_refCount = s._refCount;
++(*_refCount);
}
~String()
{
if ((--(*_refCount)) == 0)
{
delete[]_str;
delete _refCount;
printf("delete: 0x%p\n", _str);
}
}
private:
char* _str;
int* _refCount;
};
{
if ((--(*_refCount)) == 0)
{
delete[]_str;
delete _refCount;
printf("delete: 0x%p\n", _str);
}
}
private:
char* _str;
int* _refCount;
};
void TestString()
{
String s1("hello");
String s2(s1);
String s3(s2);
String s4(s1);
String s5("world");
String s6(s5);
String s6(s5);
}
int main()
{
TestString();
return 0;
}
{
TestString();
return 0;
}
阅读全文
0 0
- 深拷贝&浅拷贝&写时拷贝
- 写时拷贝技术
- linux 写时拷贝
- fork写时拷贝
- 写时拷贝
- c++ 写时拷贝
- 写时拷贝
- C++ 写时拷贝
- 写时拷贝
- 写时拷贝
- C++ 写时拷贝
- 写时拷贝
- 写时拷贝
- C++写时拷贝
- 写时拷贝
- c++写时拷贝
- 写时拷贝
- 写时拷贝
- 灰度变换与空间滤波
- java语言程序设计 第十二章 (12.18、12.19、12.20、12.21、12.22)
- 初识React
- spring boot 计划任务,定时任务的注解的使用@Scheduled@EnableScheduling
- 解锁多层嵌套列表,元组
- 写时拷贝
- RBAC从零开始--文件配置
- Java开发必会的Linux命令
- 年月日格式化yyMM,数字格式化000
- OpenCV学习笔记(一)——OpenCV3.1.0+VS2015开发环境配置
- C# 图片和Base64字符串互相转换
- usb4根线接法
- Linux 终端播放 MP3 格式音频软件
- HDOJ 1058 Humble Numbers