zoukankan      html  css  js  c++  java
  • 深拷贝 浅拷贝

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

    这样你就实现了深拷贝,原因是你为被赋值对象申请了一个新的内存所以就是深拷贝。
  • 相关阅读:
    PAT 甲级1135. Is It A Red-Black Tree (30)
    AVL树模板
    定时器模板
    Listview模板
    Hash二次探测
    BFS小结
    STL之set篇
    完全二叉树-已知中序排序,输出广度排序
    BZOJ2037: [Sdoi2008]Sue的小球
    poj1157LITTLE SHOP OF FLOWERS
  • 原文地址:https://www.cnblogs.com/xaf-dfg/p/3865244.html
Copyright © 2011-2022 走看看