智能指針什么時候不能用 C 的智能指針不就基本解決了野指針問題了嗎?為什么還要吹捧rust的內(nèi)存安全?
C 的智能指針不就基本解決了野指針問題了嗎?為什么還要吹捧rust的內(nèi)存安全?從編譯器階段開始,rust就消除了內(nèi)存安全問題,包括單線程和多線程。這是由于編譯器級別的rust的復(fù)雜所有權(quán)機制,這使
C 的智能指針不就基本解決了野指針問題了嗎?為什么還要吹捧rust的內(nèi)存安全?
從編譯器階段開始,rust就消除了內(nèi)存安全問題,包括單線程和多線程。這是由于編譯器級別的rust的復(fù)雜所有權(quán)機制,這使得任何人都不可能編寫不安全的代碼。這就是法律體系。
使用C/C,世界上沒有一個程序員能夠保證代碼的絕對內(nèi)存安全性。雖然C是一個屠龍者,但這個問題也非常重要。也就是說,沒有辦法保證代碼的內(nèi)存安全和線程安全。
C智能指針,或者在使用過程中出現(xiàn)問題,例如多線程環(huán)境中的最新共享uptr,如果程序員忘記執(zhí)行鎖定操作怎么辦?這不會發(fā)生在信任的情況下。使用arc機制,如果不鎖定,就無法訪問數(shù)據(jù)。即使在單線程環(huán)境中,您能保證所有程序員都不會傳遞智能指針實例的引用嗎?太多了。C無法在編譯時發(fā)現(xiàn)這些問題。
鐵銹是法治,而不是人治。數(shù)據(jù)訪問沖突,根本無法編譯
為什么要有句柄類,智能指針不夠用嗎?
智能指針僅封裝一層自動內(nèi)存管理,用于動態(tài)分配內(nèi)存,如復(fù)制和自動釋放。句柄類可以封裝更多的內(nèi)容。除了自動內(nèi)存管理,它們還可以封裝許多其他東西。此外,句柄類甚至可以在沒有指針的情況下實現(xiàn)。