无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

C/C++日常疑問(wèn):程序員不建議代碼中使用指針,這是為什么?

2020-09-17 22:01 作者:C語(yǔ)言編程__Plus  | 我要投稿

盡量避免在大多數(shù)代碼中使用指針實(shí)現(xiàn)。

使用現(xiàn)代C?++,您幾乎不需要傳遞指針,可以依賴引用,并且編譯器本身可以進(jìn)行優(yōu)化以避免不必要的復(fù)制和自動(dòng)轉(zhuǎn)移所有權(quán)。但不總是。


智能指針的用例仍然存在。如果必須動(dòng)態(tài)創(chuàng)建對(duì)象并將其返回到調(diào)用堆棧,則希望它們?cè)诔龇秶鷷r(shí)釋放自己。如果找不到確定的位置來(lái)刪除對(duì)象,或者無(wú)法確定要?jiǎng)h除該對(duì)象的對(duì)象,那么智能指針是一個(gè)很好的解決方案。

unique_ptr的一些優(yōu)點(diǎn)是:

您知道您的smart_ptr將持續(xù)存在,直到不再位于任何范圍內(nèi),并且沒(méi)有函數(shù)或類會(huì)意外地將其銷毀。

整個(gè)代碼路徑中指向的對(duì)象將只有一個(gè)銷毀。

unique_ptr并不是一個(gè)真正的指針,它的行為就像一個(gè)透明的指針,將調(diào)用轉(zhuǎn)發(fā)到它所連接的對(duì)象。它不能“懸掛”并且不能為空。

unique_ptr的開(kāi)銷幾乎與原始指針相同,即幾乎沒(méi)有。沒(méi)有使用原始指針的加速。

shared_ptr用于由多個(gè)線程,對(duì)象等共享(更震驚?。┑馁Y源。它們?cè)跁r(shí)間和內(nèi)存上的使用比unique_ptr昂貴,但是它們解決了在使用對(duì)象的函數(shù)結(jié)束時(shí)保持活動(dòng)對(duì)象的難題。他們?yōu)槲覀兲峁┝艘粋€(gè)參考計(jì)數(shù)器和原子訪問(wèn)。在垃圾回收語(yǔ)言中,引用計(jì)數(shù)由運(yùn)行時(shí)線程保留,但C?++?shared_ptr保留其引用計(jì)數(shù)。在大多數(shù)程序中,shared_ptr的用例少于unique_ptr。


如何避免使用智能指針泄漏:

通常,他們?yōu)槟瓿晒ぷ鳎袔准拢?/p>

1.創(chuàng)建對(duì)象后,立即將其分配給指針。

Object?*?myobject?=?new?Object(“?pi”,3.14159);

unique_ptr??op(myobject);

std?::?cout?<<?op->?getname()<<?std:endl;

2.?僅使用smart_pointer,不要再使用原始指針。

std?::?cout?<<?myobject->?getname()<<?std:endl;?//壞

//永遠(yuǎn)不要在原始指針上調(diào)用delete。

3.僅在unique_ptr內(nèi)部訪問(wèn)該對(duì)象以復(fù)制該對(duì)象。

您不能復(fù)制unique_ptr。如果需要復(fù)制對(duì)象,

則應(yīng)使用unique_ptr?::?get()和new一起將副本分配

給另一個(gè)unique_ptr。

unique_ptr??o2(*?op);?//簡(jiǎn)短,但錯(cuò)誤。

unique_ptr??o2(new?Object(*?op));?//?對(duì)

4.將unique_ptrs作為unique_ptrs傳遞給函數(shù),或者取消引用它們并將它們作為const引用傳遞。


5.如果函數(shù)必須擁有unique_ptr的所有權(quán),則將其移入函數(shù)。


6.?shared_ptr可以使用賦值()復(fù)制,a?=?b但不要將a重新分配給另一個(gè)shared_ptr,否則引用計(jì)數(shù)將減少。如果達(dá)到0,它將自行刪除。


7.不要嘗試從靜態(tài)分配的對(duì)象中創(chuàng)建unique_ptr或shared_ptr。編譯器可能會(huì)讓您在編譯時(shí)無(wú)法使用它,但是當(dāng)靜態(tài)分配的對(duì)象自行銷毀并且智能指針隨后嘗試刪除它時(shí),它將導(dǎo)致內(nèi)存錯(cuò)誤。僅用于動(dòng)態(tài)分配的對(duì)象!


8.不要new與。(C?++?14)一起使用std::make_unique。它代替new來(lái)進(jìn)行內(nèi)存分配。


希望對(duì)你有幫助!

另外如果你想更好的提升你的編程能力,學(xué)好C語(yǔ)言C++編程!彎道超車,快人一步!

分享(源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門(mén)教程)

歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!

學(xué)習(xí)C/C++編程知識(shí),提升C/C++編程能力,歡迎關(guān)注UP一起來(lái)成長(zhǎng)!
另外,UP在主頁(yè)上傳了一些學(xué)習(xí)C/C++編程的視頻教程,有興趣或者正在學(xué)習(xí)的小伙伴一定要去看一看哦!會(huì)對(duì)你有幫助的~


C/C++日常疑問(wèn):程序員不建議代碼中使用指針,這是為什么?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
巧家县| 文化| 高阳县| 东乡| 宜城市| 新河县| 东乡| 和平县| 福鼎市| 万盛区| 宣化县| 南京市| 浦东新区| 长治县| 巴中市| 铅山县| 策勒县| 肥城市| 台东县| 淮滨县| 承德市| 夏邑县| 通化市| 寿阳县| 永宁县| 海盐县| 全南县| 家居| 平凉市| 马关县| 营山县| 兖州市| 靖宇县| 留坝县| 喜德县| 衢州市| 五华县| 巫溪县| 五大连池市| 莒南县| 松江区|