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