www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀]智能指針使用上的問(wèn)題智能指針的使用太普遍了,它讓程序員擺脫了內(nèi)存管理的惡夢(mèng),但實(shí)際上智能指針本身也可能引入另一個(gè)惡夢(mèng)。主要包括兩個(gè)問(wèn)題點(diǎn):性能問(wèn)題。因?yàn)樾枰胍恍┳兞?bookkeeping),甚至

智能指針使用上的問(wèn)題

智能指針的使用太普遍了,它讓程序員擺脫了內(nèi)存管理的惡夢(mèng),但實(shí)際上智能指針本身也可能引入另一個(gè)惡夢(mèng)。主要包括兩個(gè)問(wèn)題點(diǎn):

性能問(wèn)題。因?yàn)樾枰胍恍┳兞?bookkeeping),甚至在多線程下的一些互斥操作,它所帶來(lái)的性能開(kāi)銷(xiāo)往往比想像的要高。比如以智能指針作為函數(shù)參數(shù)以及返回值時(shí)。對(duì)象釋放的時(shí)機(jī)不明確。比如std::auto_ptr,總讓人感覺(jué)不明不白。而有時(shí)一些循環(huán)引用,又會(huì)導(dǎo)致內(nèi)存泄露。

所以即便有了智能指針,程序員還是要認(rèn)真考慮使用它們的時(shí)機(jī)。

智能指針的本質(zhì)是所有權(quán)管理

所有權(quán)(Ownership)是一個(gè)用來(lái)管理動(dòng)態(tài)分配內(nèi)存的記錄(bookkeeping)技術(shù)。動(dòng)態(tài)分配內(nèi)存的所有者需要負(fù)責(zé)在所分配內(nèi)存不再需要時(shí)釋放它。共享所有權(quán)時(shí),最后一個(gè)owner負(fù)責(zé)清理。即使不是共享,也可以在代碼間傳遞Ownership。

運(yùn)用智能指針的核心是保持所有權(quán)(Ownership)的明確、清晰。一般情況下是保證所有權(quán)的單一,無(wú)論是使用WeakPtr, Scoped Pointer都可以保持所有權(quán)的單一,這時(shí)所有權(quán)可以在不同的對(duì)象/代碼段轉(zhuǎn)移。另一種情況就是需要共享所有權(quán),比較常用的引用指數(shù)智能指針,就是幫助完成共享所有權(quán)的。

概括起來(lái)三個(gè)要點(diǎn):

1.局部化?
推薦保持單一、固定的所有權(quán)。當(dāng)所有權(quán)需要在不同代碼段間傳遞時(shí),就要使用智能指針。?
2.明確的清理時(shí)機(jī)。?
使用引用計(jì)數(shù),和std::auto_ptr都會(huì)引發(fā)對(duì)釋放時(shí)機(jī)的疑問(wèn)。有可能引入一些隱晦的Bug。當(dāng)需要共享所有權(quán)時(shí),一定要先思考這個(gè)設(shè)計(jì)的必要性,以及內(nèi)存釋放的時(shí)機(jī)是否明確、清晰。?
3.最好的方式不要使用指針。可以使用引用來(lái)代替指針。見(jiàn)后面WebKit的故事。

大型項(xiàng)目中的應(yīng)用Google Coding Style的約定

如果需要?jiǎng)討B(tài)分配內(nèi)存,盡量由分配的代碼來(lái)持有所有權(quán)。?
如果另一段代碼需要訪問(wèn)對(duì)象,先考慮傳遞對(duì)象拷貝,指針或者引用,而不是傳遞所有權(quán)。如果確有需要時(shí),建議使用std::unique_ptr來(lái)顯示的傳遞所有權(quán)(使用std::move())。?
除非有好的理由,否則不要共享所有權(quán)。比如為了避免復(fù)制。這時(shí)需要確定有明顯的性能收益,而且所持有的對(duì)象最好是只讀的, 同時(shí)建議使用std::shared_ptr:

std::shared_ptr;

1

新代碼里不要再使用scoped_ptr,更不要使用std::auto_ptr, 而是使用std::unique_ptr來(lái)代替。

WebKit的故事

WebKit文檔記錄了他們使用引用計(jì)數(shù)指針的故事,詳情見(jiàn):RefPtr Basics。大意為:?
早在2005年時(shí)為了解決內(nèi)存泄露問(wèn)題,開(kāi)始使用基于引用計(jì)數(shù)的智能指針,但是它有性能問(wèn)題,特別是當(dāng)作函數(shù)參數(shù)和返回值傳遞時(shí)。后來(lái)使用C++11提供move語(yǔ)義(即轉(zhuǎn)移所有權(quán)的方式)來(lái)解決了這個(gè)問(wèn)題。(另外shared_ptr const & 的形式也可以避免不必要的引用計(jì)數(shù)操作。)

而到了2013年,WebKit的開(kāi)發(fā)者發(fā)現(xiàn)泛濫的判空和有效性檢查,于是開(kāi)始傾向于盡可能地使用引用(注意:不是引用計(jì)數(shù)指針), 而不是指針。

小結(jié)

解決內(nèi)存問(wèn)題的最佳的途徑仍然是由程序員管理好對(duì)象的生命周期。使用智能指針也是有成本的,同時(shí)也會(huì)引入一些新問(wèn)題,所以需要遵循一些約定來(lái)使用。Google Chromium/Webkit都有相應(yīng)用的定義:

Chromium: Smart Pointer GuidelineWebKit: RefPtr Basics

另外明確約定一個(gè)函數(shù)是否會(huì)返回空指針,特別是對(duì)于API來(lái)說(shuō),也會(huì)幫助使用者避免一些不必要的判空處理和一些隱晦的Bug。

進(jìn)一步學(xué)習(xí):

unique_ptr使用簡(jiǎn)介Reference counting smart pointers are for retards.

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉