分配結構'對象'的引用計數的基礎知識對我來說看起來相當簡單:爲新對象提供RC 1;賦值減少舊對象的RC(如果RC = 0,則爲空),並增加指定對象的RC;減少離開範圍的所有對象的RC。如何在C參數傳遞中引用計數
但是,當RC'ed對象傳遞給函數或從函數返回時,我需要做什麼我有點困惑。在每次函數調用之前/之後,我是否必須加/減RC?如果需要,應該在什麼地方放置inc和dec?(在函數調用之後的起始&端處或在&之前?)?關於函數返回的RC'ed對象怎麼樣?
分配結構'對象'的引用計數的基礎知識對我來說看起來相當簡單:爲新對象提供RC 1;賦值減少舊對象的RC(如果RC = 0,則爲空),並增加指定對象的RC;減少離開範圍的所有對象的RC。如何在C參數傳遞中引用計數
但是,當RC'ed對象傳遞給函數或從函數返回時,我需要做什麼我有點困惑。在每次函數調用之前/之後,我是否必須加/減RC?如果需要,應該在什麼地方放置inc和dec?(在函數調用之後的起始&端處或在&之前?)?關於函數返回的RC'ed對象怎麼樣?
一般來說,任何時候一個新的引用被創建,你會增加,每當一個被銷燬/丟棄時,你會減少。
函數參數需要一個副本,所以這是一個增量。函數返回值需要一個副本,所以這是一個增量。當然,在很多情況下,也會有相應的同時丟棄,所以您可以通過不修改計數來進行優化。
當然,在C語言中,這可能非常複雜且容易出錯,因爲您必須手動執行所有操作。一個破碎/不可靠的引用計數機制可能比沒有一個更糟。
遞增引用計數就像是說「我對指向的內容感興趣,所以我將指針存儲在某個地方,請勿在我不看的時候釋放它」。
因此,每次存儲指針都是「引用」並且必須計數。
如果該函數不在某處存儲指針,則不需要增加它。 如果你存儲了指針,一旦你完成了使用它,減少引用計數。\
很多時候,一個'對象'將返回一個引用計數已經設置爲1.你必須閱讀函數文檔來知道它是否已經將引用的「所有權」傳遞給了你(在這種情況下,你將不得不減少計數),或者如果你需要調用一些其他函數,它會減少它並刪除對該指針的引用內部的另一個對象。
我覺得功能是一樣的。
如果你傳遞了一個指向函數調用的指針,爲什麼不把它當作一個賦值?(所以我認爲RC應該增加)
當你離開函數時,我認爲它和離開範圍一樣。
關於返回值,如果它用於賦值,則正如您所說,RC + 1或RC不需要更改。