首页 > 代码库 > 深拷贝 浅拷贝
深拷贝 浅拷贝
在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存,采用深拷贝的情况下,释放内存的时候就不会出现在浅拷贝时重复释放同一内存的错误!
1 class string 2 { 3 4 char *m_str; 5 public: 6 string(char *s) 7 { 8 m_str=s; 9 }10 string()11 {};12 13 String & operator=(const string s)14 {15 m_str=s.m_str;16 return *this17 }18 };19 20 int main()21 {22 string s1("abc"),s2;23 s2=s1;24 cout<<s2.m_str;25 }
上面的 =重载其是就是实现了浅拷贝原因。是由于对象之中含有指针数据类型.s1,s2恰好指向同一各内存。所以是浅拷贝。而你如果修改一下原来的程序:
1 string&operator=(const string&s) 2 { 3 4 if(strlen(m_str)!=strlen(s.m_str)) 5 m_str=new char[strlen(s.m_str)+1]; 6 if(*this!=s) 7 strcopy(m_str,s.m_str); 8 return *this; 9 10 }
这样你就实现了深拷贝,原因是你为被赋值对象申请了一个新的内存所以就是深拷贝。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。