2012-04-06 22 views
8

引用計數到底是什麼?特別是C++是什麼?如果我們不處理它們,我們可能會遇到什麼問題?所有語言都需要引用計數嗎?C++中的引用計數是什麼意思?,

+2

開始閱讀[這裏](http://www.gotw.ca/gotw/043.htm)。 – Xeo 2012-04-06 19:20:35

+1

「引用計數是一種常見的優化(也稱爲」延遲複製「和」寫入時複製「)。」 - 香草薩特。 WTF?引用計數絕對不會與「延遲複製」或「寫入時複製」相同。引用計數(通常是)用於內存管理。這不是一個優化本身。 – 2012-04-06 19:28:34

+0

[關於參考計數的維基百科頁面](http://en.wikipedia.org/wiki/Reference_counting)是一個相當不錯的主題介紹。 – 2012-04-06 19:29:02

回答

0

引用計數垃圾回收是一種用於管理內存的強大技術,有助於防止意外或不止一次刪除對象。該技術不限於C++代碼,儘管其名稱與C++概念的引用變量無關。相反,該術語意味着我們保持對一個對象的所有「擁有引用」的計數,並在該計數變爲零時刪除該對象。

1

引用計數是一種簡單但不完整的垃圾檢測方法。

當計數器達到零時,您可以釋放該對象。

,但如果沒有它引用對方循環更使用的對象,他們將永遠不會被釋放

考慮一個引用 B,B 引用一個,但沒有別的參考 a或b。 參考計數a和b將仍然爲1(=正在使用)

+2

嚴格地說,當你有引用計數的資源時,你不是「垃圾收集」,因爲沒有垃圾。在所有引用丟失之後,垃圾就是你得到的*。 C++通常不會產生垃圾。 (也許不像C++ *程序員*) – 2012-04-06 19:35:59

+0

對,這就是爲什麼我使用垃圾檢測 – 2012-04-06 19:37:31

+0

這不是「垃圾」,但! – 2012-04-06 19:42:17

-2

引用計數 - 讓我們使用一個隱喻。

你有耳朵。你想在某個時候回來。

你得到一羣人指着你的耳朵。你指望他們,只要他們點。

當數字變爲零時 - 它只是你的,你可以隨心所欲地做。

I.e.將其從等式中移出(將其釋放回內存)。

順便說一句。循環的東西很難找到。

+3

「你有一個耳朵,你想在某個時候回來。」那麼,我已經擁有了它,不需要回來。當十幾個人指出這一點時,這也是我的耳朵。有缺陷的隱喻。 – Evert 2013-02-01 09:57:12

7

引用計數到底是什麼?特別是C++是什麼?

簡而言之,引用計數意味着計算對某個對象的引用。

通常,C++採用RAII的技術。其中,管理類型對象解除分配的能力是綁定在類型對象本身內的。這意味着用戶不必明確地管理對象的生命週期和其解除分配,執行此管理的功能是建立在對象本身中的。

該功能意味着該對象應該存在並保持有效,直到有利益相關者引用該對象,並且這通過引用計數來實現。每次對象被共享(複製)時,引用計數(通常是類類型內的成員)都會增加,每次調用析構函數時,計數遞減,當計數達到0時,對象不會被任何人標誌着它的一生結束,因此被破壞。

如果我們不處理它們,我們可能會遇到什麼問題?

這意味着沒有更多的RAII,以及無窮無盡且經常出現故障的手動資源管理。
簡而言之編程惡夢。

所有語言都需要引用計數嗎?

語言不要求引用計數,但採用該技術提供了語言的使用者非常容易使用和更小的努力,所以大多數語言喜歡用它來提供這些優點給他們的用戶。