指針ptr什么意思 c 中關(guān)于智能指針std::tr1::shared_ptr的用法?
c 中關(guān)于智能指針std::tr1::shared_ptr的用法?智能指針本身不能動(dòng)態(tài)分配內(nèi)存,否則它將沒(méi)有存在的意義。關(guān)于發(fā)生時(shí)異常時(shí),shared_ptr智能指針會(huì)自動(dòng)析構(gòu)的疑問(wèn)?]。原則上,當(dāng)
c 中關(guān)于智能指針std::tr1::shared_ptr的用法?
智能指針本身不能動(dòng)態(tài)分配內(nèi)存,否則它將沒(méi)有存在的意義。
關(guān)于發(fā)生時(shí)異常時(shí),shared_ptr智能指針會(huì)自動(dòng)析構(gòu)的疑問(wèn)?
]。
原則上,當(dāng)異常發(fā)生或函數(shù)返回時(shí),編譯器的代碼插入可以保證析構(gòu)函數(shù)的調(diào)用。但是,通常不會(huì)在構(gòu)造函數(shù)和析構(gòu)函數(shù)中拋出異常。
C異常是庫(kù)和邏輯級(jí)別,必須是代碼拋出;錯(cuò)誤的內(nèi)存訪問(wèn)和被零除的錯(cuò)誤不是C異常(在以前的vs IDE上,Ms擴(kuò)展了編譯器行為以允許try/catch處理結(jié)構(gòu)化異常)。注意IDE設(shè)置選項(xiàng))。這與Java和C不同。它們位于虛擬機(jī)的平臺(tái)級(jí)別。除了拋出代碼外,虛擬機(jī)還將拋出異常。
此外,異常在C中是可選的,許多庫(kù)提供了關(guān)閉或打開(kāi)開(kāi)關(guān)。Java和C#是強(qiáng)制性的,屬于核心機(jī)制。
感覺(jué)C 很簡(jiǎn)單,但為何這么多勸退的?
寫CPP,語(yǔ)法痛點(diǎn)模板,當(dāng)你的模板錯(cuò)誤達(dá)到數(shù)百行,你就會(huì)明白說(shuō)服1。第二個(gè)痛點(diǎn)是內(nèi)存操作,包括內(nèi)存溢出、內(nèi)存泄漏、臟內(nèi)存數(shù)據(jù)、共享內(nèi)存、內(nèi)存池等相關(guān)問(wèn)題。遲早,程序會(huì)崩潰,1會(huì)被阻止。第三個(gè)難點(diǎn)是鎖定、多處理、多線程、協(xié)同編程、流水線通信和消息機(jī)制。這些都是操作系統(tǒng)的相關(guān)知識(shí),要理解并不比學(xué)習(xí)CPP容易。1第四,由于使用了CPP,所以遲早會(huì)使用so和DLL。相應(yīng)的調(diào)試噩夢(mèng)即將來(lái)臨。用GDB在服務(wù)器上調(diào)試多進(jìn)程、多線程程序的難度和復(fù)雜性會(huì)使人迷路。1第五,不同的平臺(tái)和編譯器,優(yōu)化和非優(yōu)化導(dǎo)致不同的程序運(yùn)行結(jié)果。此時(shí),我無(wú)言以對(duì)。第六個(gè)是宏噩夢(mèng)、DLL依賴噩夢(mèng)、CPP編譯時(shí)間噩夢(mèng),以及突然系統(tǒng)升級(jí)(安全漏洞修復(fù))導(dǎo)致的庫(kù)不兼容噩夢(mèng)。沒(méi)有經(jīng)歷過(guò)的人是感覺(jué)不到的。
C 的智能指針不就基本解決了野指針問(wèn)題了嗎?為什么還要吹捧rust的內(nèi)存安全?
從編譯器階段開(kāi)始,rust就消除了內(nèi)存安全問(wèn)題,包括單線程和多線程。這是由于編譯器級(jí)別的rust的復(fù)雜所有權(quán)機(jī)制,這使得任何人都不可能編寫不安全的代碼。這就是法律體系。
使用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ú)法編譯
c 中weak_ptr到底是干什么用的?
弱uptr是匹配共享uptr并引入智能指針來(lái)輔助共享uptr工作,它可以從一個(gè)共享uptr或另一個(gè)弱uptr對(duì)象構(gòu)造工作,其構(gòu)造和解構(gòu)不會(huì)增加或減少引用計(jì)數(shù)。沒(méi)有重載*和->,但可以使用lock獲取可用的共享PTR對(duì)象。弱u2; PTR的一個(gè)重要用途是通過(guò)lock 2; PTR得到這個(gè)指針的shared,這樣對(duì)象本身就可以產(chǎn)生shared 2; PTR來(lái)管理自己,但是helper類enable 2; shared 2; from 2; shared of this 2; from 2;這會(huì)返回這個(gè)2; PTR的shared,只想被共享2; PTR管理的類可以從中繼承。