国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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ó)家法律
太仆寺旗| 三河市| 水城县| 汉源县| 台山市| 通城县| 娄烦县| 湘阴县| 东乌| 曲沃县| 萨迦县| 缙云县| 尚义县| 安阳县| 黔西县| 玉田县| 莲花县| 开平市| 门源| 库伦旗| 阜宁县| 阳谷县| 浦县| 天全县| 寻甸| 盘山县| 大余县| 马龙县| 时尚| 景宁| 额敏县| 新宾| 磴口县| 长宁县| 新兴县| 扶沟县| 余姚市| 松原市| 友谊县| 准格尔旗| 泸溪县|