最近学习string类的时候感觉这里概念有点混淆,浅拷贝与深拷贝的区别,上网查了一下,原来没我想
的难么复杂,以下是我的理解,如果有不对的地方求大佬留言交流交流。
浅拷贝:
顾名思义就是浅层的拷贝,只拷贝对象内容,不管对象内部是怎么实现的,通常情况下进行都是进行浅拷贝
的,当涉及到指针,只会复制指针的地址,这样就会造成之前的指针内容改变时拷贝后的内容也
发生改变,即就是底层共用一个内存;
int main()
{
int a = 10;
int* aa = &a;
//拷贝
int* p = aa;
cout <<"aa: " <<*aa << endl;
cout << "p: " << *p << endl;
(*aa)++;
cout << "aa: " << *aa << endl;
cout << "p: " << *p << endl;
return 0;
}
memcpy()也属于浅拷贝,底层实现原理就是拷贝内存,当发生拷贝内存时,里面的指针还是指向同一块
空间的,
深拷贝
深拷贝就是自己申请内存,再拷贝内容;
int main()
{
int a = 10;
int* aa = &a;
//拷贝
int* p = new int();
*p = *aa;
cout <<"aa: " <<*aa << endl;
cout << "p: " << *p << endl;
(*aa)++;
cout << "aa: " << *aa << endl;
cout << "p: " << *p << endl;
return 0;
}