您的位置:首页 > 编程语言 > C语言/C++

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++ 写时拷贝