一句话,看是否拷贝该对象所引用的对象,所谓该对象所引用对象是指该对象中指针所指向的对向或通过引用来引用对象。看下面这个例字,
#include <iostream>
using namespace std;
class mystring
{
public :
char * s;
mystring(){};
mystring(char *t)
{
s=t;
}
//深拷贝————申请一块新的内存地址来存放指针s所指向的对象
mystring(const mystring &str)
{
s = (char *)malloc(strlen(str.s) + 1);
strcpy(s,str.s);
}
//浅拷贝————str.s 和s指向同一块内存区域
//mystring(const mystring &str)
//{
// s = str.s;
//}
};
int main()
{
char temp[]="abc";
mystring s1(temp);
mystring s2(s1);
*(s2.s) = 'b';
cout<< s1.s << " " <<s2.s;
system("PAUSE");
return 0;
}
深拷贝的输出结果是:abc bbc s1和s2的s指针指向不同的内存区域,当*(s2.s)='b'时,只改变它自身所指向内存区域的值
浅拷贝的输出结果是:bbc bbc s1和s2的s指针指向同一块内存区域,当*(s2.s)即s2.s[0] = 'b'时,该内存区域中的值改变