深拷贝 #include<iostream> #include<stdio.h> using namespace std; class String { public : String(char* str="") : _str(new char [strlen(str )+1]) { strcpy(_str , str); } String(const String& s)//拷贝构造 :_str(NULL) { String tmp(s._str ); swap(_str,tmp._str ); } String& operator =(const String& s ) { swap(_str,s._str ); return *this; } ~ String() { if(_str) { delete[] _str ; } } private : char* _str ; } void test1 () { String s1("s1"); String s2(s1); String s3("s3"); String s4(s3); s1=s4; } int main() { test1(); system("pause"); return 0; } 引用计数浅拷贝 #include<iostream> #include<stdio.h> using namespace std; class String { public : String(char* str="") : _str(new char [strlen(str )+1]) ,_pCount(new int(1)) { strcpy(_str , str); } String( String& s) :_str(s._str ) ,_pCount(s._pCount) { ++(*_pCount); } String& operator =(const String& s ) { if(--(*_pCount)==0) { delete _pCount; delete[] _str; } _str=s._str ; _pCount=s._pCount ; ++(*_pCount); return *this; } ~ String() { if (--(*_pCount)==0&&_str ) { delete _pCount; delete[] _str ; } } private : char* _str ; int* _pCount; }; void testcount () { String s1("s1"); String s2(s1); String s3(s2); String s4("s4"); String s5 (s4); s1=s4; } int main() { testcount(); system("pause"); return 0; }
时间: 2024-10-22 00:53:09