浅拷贝与深拷贝的区别
生活随笔
收集整理的這篇文章主要介紹了
浅拷贝与深拷贝的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡單的來說就是,在有指針的情況下,淺拷貝只是增加了一個指針指向已經存在的內存,而深拷貝就是增加一個指針并且申請一個新的內存,使這個增加的指針指向這個新的內存,采用深拷貝的情況下,釋放內存的時候就不會出現在淺拷貝時重復釋放同一內存的錯誤!
我列舉一個例子來說吧:
你正在編寫C++程序中有時用到,操作符的重載。最能體現深層拷貝與淺層拷貝的,就是‘=’的重載。
看下面一個簡單的程序:
上面的 =重載其是就是實現了淺拷貝原因。是由于對象之中含有指針數據類型.s1,s2恰好指向同一各內存。所以是淺拷貝。而你如果修改一下原來的程序:
string& operator=(const string&s) {if(strlen(m_str)!=strlen(s.m_str))m_str=new char[strlen(s.m_str)+1];if(*this!=s)strcpy(m_str,s.m_str);return *this; }
這樣你就實現了深拷貝,原因是你為被賦值對象申請了一個新的內存所以就是深拷貝。
總結
以上是生活随笔為你收集整理的浅拷贝与深拷贝的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ 程序内存泄漏检测方法
- 下一篇: delete 和 delete [] 的