最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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ó)家法律
深水埗区| 类乌齐县| 周至县| 会泽县| 宣威市| 宾川县| 安阳市| 越西县| 满洲里市| 汶上县| 霍山县| 扎鲁特旗| 海原县| 金溪县| 洪江市| 南木林县| 曲沃县| 长葛市| 枣庄市| 柳江县| 乐山市| 庆阳市| 永清县| 四子王旗| 华宁县| 赣州市| 新宁县| 山丹县| 万州区| 天门市| 莱芜市| 木兰县| 新余市| 通辽市| 应城市| 顺义区| 新密市| 玉溪市| 德庆县| 扶风县| 鸡泽县|