浅拷贝:又称值拷贝,将源对象 的值拷贝到目标拷贝对象中去,本质上来说源对象和目标拷贝对象共用一份实体,只是所引用的变量名不同,地址其实还是相同的。举个简单的例子:你的小名叫西西,大名叫沫沫,当别人叫你西西或者沫沫的时候你都会答应,这两个名字虽然不相同,但是都指的是你。
假设有一个String类,String s1;String s2(s1);在进行拷贝构造的时候将对象s1里的值全部拷贝到对象s2里。
我现在来简单的实现一下这个类:
#include<iostream>
#include<cstring>
#pragma warning(disable:4996)
using namespace std;
class STRING{
public:
STRING(char* s="")
:_str(new char[strlen(s)+1])
{
strcpy(_str,s);
}
STRING(const STRING& s)
{
_str=s._str;//两个指针指向了同一块内存区域
}
STRING& operator=(const STRING& s)
{
if(this!=&s)
{
this->_str=s._str;
}
return *this;
}
~STRING()
{
if(_str)
{
delete[] _str;
_str=NULL;
}
}
void show()
{
cout<<_str<<endl;
}
private:
char* _str;
};
void test()
{
STRING s1("hello linux!");
STRING s2(s1);
s2.show