可以理解为 “写时才拷贝技术”
功能:
修改前:浅拷贝(增加一个指针指向已存在的内存)
修改时:深拷贝(增加一个指针并申请一个新的内存,使这个增加的指针指向新的内存)
三种情况:
对象:普通成员变量
类中:静态成员变量
内存中
代码实例:
#pragma warning(disable:4996)
class String
{
public:
String(char* pstr) :_str(new char[strlen(pstr) + 1 + 4])
{
_str += 4;
strcpy(_str, pstr);
getRef() = 1;
}
String(const String& rhs) :_str(rhs._str)
{
++getRef();
}
String& operator=(const String& rhs)
{
if (this != &rhs)
{
Release();
_str = rhs._str;
++getRef();
}
return *this;
}
~String()
{
Release();
}
char& operator[](int index)
{
if (getRef() > 1)
{
char* ptmp = new char[strlen(_str) + 5];
ptmp += 4;
strcpy(ptmp, _str);
--getRef();
_str = ptmp;
getRef() = 1;
}
return _str[index];
}
private:
void Release()
{
if (--getRef() == 0)
{
delete[] (_str - 4);
}
_str = NULL;
}
int& getRef()
{
return *((int*)(_str - 4));
}
char* _str;
};
int main()
{
String str1("hello");
String str2(str1);
String str3(str1);
str2[0] = 'w';
char a = str2[0];
return 0;
}