關於為什麼過載 要使用引用

2021-10-04 03:41:00 字數 707 閱讀 7159

先那我寫的作為乙個例子來說明吧

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明顯有效的實現了今...