智能指針內存泄漏 C 的智能指針不就基本解決了野指針問題了嗎?為什么還要吹捧rust的內存安全?
C 的智能指針不就基本解決了野指針問題了嗎?為什么還要吹捧rust的內存安全?從編譯器階段開始,rust就消除了內存安全問題,包括單線程和多線程。這是由于編譯器級別的rust的復雜所有權機制,這使
C 的智能指針不就基本解決了野指針問題了嗎?為什么還要吹捧rust的內存安全?
從編譯器階段開始,rust就消除了內存安全問題,包括單線程和多線程。這是由于編譯器級別的rust的復雜所有權機制,這使得任何人都不可能編寫不安全的代碼。這就是法律體系。
使用C/C,世界上沒有一個程序員能夠保證代碼的絕對內存安全性。雖然C是一個屠龍者,但這個問題也非常重要。也就是說,沒有辦法保證代碼的內存安全和線程安全。
C智能指針,或者在使用過程中出現(xiàn)問題,例如多線程環(huán)境中的最新共享uptr,如果程序員忘記執(zhí)行鎖定操作怎么辦?這不會發(fā)生在信任的情況下。使用arc機制,如果不鎖定,就無法訪問數(shù)據(jù)。即使在單線程環(huán)境中,您能保證所有程序員都不會傳遞智能指針實例的引用嗎?太多了。C無法在編譯時發(fā)現(xiàn)這些問題。
鐵銹是法治,而不是人治。數(shù)據(jù)訪問沖突,根本無法編譯
什么時候引用而不用指針?
嚴格來說,C不建議使用指針,因為面向對象是引用和智能指針的世界。因此,C最好不要將引用與指針一起使用。但有時我們必須這樣做,比如在類中定義指向成員變量的指針,在函數(shù)中創(chuàng)建動態(tài)應用程序。此時,我們可以智能地使用指針,或者一些智能指針。因此,具體分析沒有絕對依據(jù)。建議使用盡可能少的指針,因為每個指針的存在可能需要內存管理和釋放。