您的位置:首页 > 编程语言 > C语言/C++

C++的深拷贝实现

2016-03-20 20:14 351 查看
深拷贝
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 浅拷贝 深拷贝