拷贝函数
拷贝函数分为浅拷贝和深拷贝,浅拷贝是系统自带的一个函数,它的功能是让两个指针指向同一块内存空间来实现内存共享。深拷贝函数是用户根据需求自定义的一个函数,它的功能是让每个对象都有一块独立的内存空间。
写时拷贝就是集合了浅拷贝和深拷贝的特性,当我们在调用点只做访问时,用浅拷贝就行。当我们要在调用点修改已存在对象的某个字符时,调用深拷贝函数。
设计思想:定义一个计时器,计时器存放在字符串中。每将一个已存在的对象赋值给新对象时,计时器自加;当调用点需要改变某个自负床中的一个字符时,就调用深拷贝来开辟一块新空间,并在新空间重新定义一个计时器。也就是说,每个字符串对象中都存放着一个四个字节大小的计时器。当增加一个指向时计时器自加,释放某个指向时,字符串自减。
具体代码(包含注释)如下:
#include<iostream>
class string
{
string(char* str)
{
mstr = new char[strlen(str) + 1 + 4](); //开辟空间时多开辟四个字节的空间用来存放计时器
mstr += 4; //将空间大小往后移4个字节,前面四个字节用来存放计时器,后面的字节用来存放字符串
strcpy_s(mstr, strlen(str) + 1, str);
getref() = 1;