1.两者的区别
浅拷贝:按照我的理解就是,两类之间发生数据成员的赋值,如果只是简单数据类型之间的赋值,浅拷贝完全能够胜任,但是碰到有指针的时候,两个类之间浅拷贝,那么两个对象中的指针会指向同一个地址,那么析构函数执行的时候就会发生错误(同一指针释放了两次)。
深拷贝:在浅拷贝的基础上对指针拷贝进行处理,让两个类指针中的指针指向不同的区域,这样两个类指针虽然内容想到,但是是存储在内存的不同区域。
以下为深拷贝举例:
#include<iostream>
#include<cstring>
using namespace std;
class String
{
protected:
char *m_str;
public:
String(){m_str=new char[1];m_str[0]=0;}
String(char *s)
{
if(s!=0)
{
m_str=new char[strlen(s)+1];//注意必须申请空间
strcpy(m_str,s);//必须加上if(s),strcpy第二个不能为空
}
}
String operator=( String s);
void show(){cout<<m_str<<endl;}
};
String& String::operator=( String s)
{
delete[] m_str;//加上使前面空间不浪费
m_str=new char[strlen(s.m_str)+1];//注意申请空间
strcpy(m_str,s.m_str);
return *this;
}
int main()
{
String s1("abc"),s2;
s2=s1;
s2.show();
}
c++深拷贝与浅拷贝
最新推荐文章于 2023-05-10 22:11:09 发布