字符串类的深浅拷贝,写时拷贝

  

字符串类的深浅拷贝,写时拷贝

浅拷贝:多个指针指向同一块空间,多次析构同一块内存空间,系统会崩溃。(浅拷贝就是值拷贝)

深拷贝:给指针开辟新的空间,把内容拷贝进去,每个指针都指向自己的内存空间,析构时不会内存崩溃。

# 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;   }


字符串类的深浅拷贝,写时拷贝