简单的赋值浅拷贝class String{public :     String(const char* str)         : _str(new char [strlen(str )+1])    {          strcpy(_str , str);    }     String(const String& str)         : _str(str ._str)    {}     String& operator =(const String& str )    {          if (this != &str)         {              _str = str ._str;         }         return *this;    }    ~ String()    {          if (_str )         {              delete[] _str ;         }    }private :     char* _str ;};void TestString (){     String s1 ("hello world!");     String s2 = s1;}当类里面有指针对象时,进行简单赋值的浅拷贝,两个对象指向同一块内存,存在崩溃的问题!这里我们要进行深拷贝。#define  _CRT_SECURE_NO_WARNINGS//#include
//using namespace std;//class String//{//public:// //String(const char *str) :_str(new char[strlen(str)+1])//深层拷贝// //{// // strcpy(_str, str);// //}// String(char *str = "") :_str(new char[strlen(str)+1])// {//  strcpy(_str, str);// }// //String(String & s)// //{// // _str = s._str;// //}      浅拷贝测试// String(const String & s) :_str(new char[strlen(s._str)+1])                       //深拷贝// {//  strcpy(_str, s._str);// }///* String& operator=( const String&s)// {//  if (this != &s)//  {//   char *p = _str;//   _str = new char[strlen(s._str) + 1];//   delete[]p;//   strcpy(_str, s._str);////  }//  return *this;// } */  //传统写法//// //现代写法// String& operator=( String&s)// {//  if (this != &s)//  {//   String tmp(s);//   std::swap(_str, tmp._str);//  }//  return *this;// }////// ~String()// {//  if (_str)//   delete[]_str;// }//private:// char *_str;////};//int main()//{// String s1("abcd");// String s2(s1);// String s3("qwer");// s3 = s1;// String s4;// s4 = s3;// return 0;//}#include
//   引用计数 using namespace std;class String{public: String(char *str = "") :_str(new char[strlen(str) + 1]), _refCount(new int(1)) {  strcpy(_str, str); } String(const String& s) {  _str = s._str;  _refCount = s._refCount;  ++*_refCount; } ~String() {  if (--*_refCount == 0)   delete[]_str; } private: char *_str; int *_refCount;//};int main(){ String s1("abcde"); String s2(s1); String s3("qwer"); String s4(s3); return 0;}