码迷,mamicode.com
首页 > 其他好文 > 详细

深拷贝 浅拷贝

时间:2014-07-24 12:14:45      阅读:316      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   数据   re   c   div   ar   

 

在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存,采用深拷贝的情况下,释放内存的时候就不会出现在浅拷贝时重复释放同一内存的错误!
 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 *this
17     }
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 }

这样你就实现了深拷贝,原因是你为被赋值对象申请了一个新的内存所以就是深拷贝。

深拷贝 浅拷贝,布布扣,bubuko.com

深拷贝 浅拷贝

标签:style   blog   color   数据   re   c   div   ar   

原文地址:http://www.cnblogs.com/xaf-dfg/p/3865244.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!