c++ 写时拷贝
2016-03-12 13:31
441 查看
写时拷贝--Copy On Writ
#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;class String{public:String(char *str = "") :_str(new char[strlen(str)+5]){_str += 4;_GetRefCount(_str) = 1;strcpy(_str, str);}String( String &s) :_str(s._str){++_GetRefCount(s._str);}int& _GetRefCount( char* _str){return *(int *)(_str - 4);}String & operator=(String & s){if (_str != s._str){Release();_str = s._str;++_GetRefCount(s._str);}return *this;}char &operator[](size_t index){if (_GetRefCount(_str) > 1){char *tmp = new char[strlen(_str) + 5];tmp += 4;strcpy(tmp, _str);_GetRefCount(tmp) = 1;--_GetRefCount(_str);_str = tmp;}return _str[index];}void Release(){if (--_GetRefCount(_str) == 0){delete[](_str - 4);cout << "delete" << endl;}}~String(){Release();}private:char *_str;};void test1(){String s1("Hello world");String s2(s1);String s3(s1);String s4(s1);s1[0] = 'M';String s5("asdasdasdas");s5 = s1;}int main(){test1();system("pause");return 0;写时拷贝: 给类增加一个引用计数,拷贝的时候增加一个引用计数,在对类成员进行拷贝时候,只给之前的引用计数加1,析构条件为当引用计数为1 的时候,要对对象进行修改的时候再创建一份新的对象进行修改并改变指针指向
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性