先那我寫的作為乙個例子來說明吧
person& operator=(person& p)//使用引用
m_age = new int(*p.m_age);
return *this;
}
在vs下單步除錯會發現,如果不使用引用執行到p2=p1這一步則會呼叫拷貝函式,不難理解,因為拷貝函式使用的三個場景就是:
1.使用已經建立的物件來初始化乙個新建物件
person p1(10);
person p2(p1);//進入拷貝
2.值傳遞的方式給引數傳值
void func(person p)//進入拷貝
3. 以值方式返回區域性物件
person func()
因為過載=,其實就是乙個函式,如果不使用引用,就是第二種情況,而編譯器預設的拷貝構造是淺拷貝的,即堆中資料乙份,在函式退出時,系統自動**形參,就會delete掉函式的引數也即例子中的p
而在這之後如果系統再使用這乙個位址是肯定會出錯的
解決方法:
1.使用引用,使用了引用就是別名,不會呼叫拷貝,自然也不會釋放
2.那就是重寫拷貝為深拷貝,如下:
person(const person& p)//拷貝構造
不使用引用,重寫拷貝構造,成功執行 為什麼要使用blog
有哥們問我,你為什麼使用blog?我總結了一下,覺得有如下幾個原因。1對自己的督促 有了blog,就會經常記得寫點東西 就會經常翻翻網上的新文章,了解一下新技術,不至於迷失在忙碌的生活中 如果把自己的所感所想所學寫出了,自己對自己也會有個概念,不至於迷迷糊糊 還有,畢竟是掛在網上的文字,心中難免擔心...
為什麼要使用XML
xml 代表擴充套件標記語言 extensible markup language 是由 world wide web consortium w 3c 的 xml工作組定義的。這個工作組是這樣描述該語言的 擴充套件標記語言 xml 是 sgml 的子集,其目標是允許普通的 sgml 在web 上以目...
為什麼要使用Nginx?
有人說這些基準測試是不準確的,因為在這樣那樣的環境下,做的比較不一致。我傾向同意基準測試只是告訴了我們其中一部分情況,你能做的是消除偏見 有人見過所有人都同意乙個基準測試是公平的嗎?我是沒見過。我們投資的一些公司把web平台切換到nginx後,可以顯著的解決擴充套件問題。nginx明顯有效的實現了今...