字符串类的深浅拷贝,写时拷贝
浅拷贝:多个指针指向同一块空间,多次析构同一块内存空间,系统会崩溃。(浅拷贝就是值拷贝)
深拷贝:给指针开辟新的空间,把内容拷贝进去,每个指针都指向自己的内存空间,析构时不会内存崩溃。
# include & lt; iostream> # include & lt; string> using namespace 性传播疾病; class 字符串 { 公众: 字符串(const char * str) :_str (new char [strlen (str) + 1]) { strcpy (_str, str); }//字符串(const String&, str),,,//浅拷贝//:_str (str._str)//{}//String 和操作符=(const String&, str),,//{//如果(这!=,,str)//{//_str =, str._str;//}//return *;//} 字符串(const String&, str),,,,,,,,,,,,,,,,//深拷贝 :_str (new char [strlen (str._str) + 1]) { strcpy (_str str._str); } String 和操作符=(const String&, str) { 如果这个!=,str) {//删除[],_str;//_str=new char [strlen (str._str) + 1];//拷贝字符串(_str str._str); _str=str._str; } return *; } ~字符串() { 如果(_str) { cout<& lt;“~字符串()“& lt; & lt; endl; 删除[],_str; } } 私人: char * _str; }; void TestString () { String s1 (“hello 世界!“); String s2=s1//s2 (s1) } int main () { TestString (); return 0; }
写时拷贝:会存在一个计数器,并且多个对象指向同一块空间,每次创建一个新的对象时计数器加+ +,销毁时计数器———直到计数器数=0时析构。
class String ,,,,,, { 公众: 字符串(const char * str) :_str (new char [strlen (str) + 1]) ,_count (1) { strcpy (_str, str); } 字符串(const String&, str) :_str (str._str) { _count + +; } String 和操作符=(const String&, str),, { 如果这个!=,,str) { 时间=_str str._str; } return *; } ~字符串() { 如果(——_count ==, 0) { cout<& lt;“~字符串()“& lt; & lt; endl; 删除[],_str; } } 私人: char * _str; int _count; }; void 测试() { String s1 (“hello 世界!“); String s2=s1; String s3 =, s2; } int main () { 测试(); return 0; }