简单的赋值浅拷贝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;}