第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我們應(yīng)該按引用還是按值傳遞shared_ptr?

我們應(yīng)該按引用還是按值傳遞shared_ptr?

C++
慕斯709654 2020-02-03 14:41:31
當(dāng)一個函數(shù)接受shared_ptr(來自boost或C ++ 11 STL)時,是否要傳遞它:通過const參考: void foo(const shared_ptr<T>& p)或值:void foo(shared_ptr<T> p)?我更喜歡第一種方法,因為我懷疑它會更快。但這真的值得嗎?還是有其他問題?請問您提供選擇的理由,或者如果是這樣的話,為什么您認(rèn)為這沒有關(guān)系。
查看完整描述

3 回答

?
HUWWW

TA貢獻(xiàn)1874條經(jīng)驗 獲得超12個贊

Scott,Andrei和Herb 在C ++和Beyond 2011的“ 任何問題”會議上都討論并回答了這個問題。從4:34 開始觀看性能和正確性。shared_ptr


不久,沒有理由按值傳遞,除非目標(biāo)是共享對象的所有權(quán)(例如,在不同的數(shù)據(jù)結(jié)構(gòu)之間或在不同的線程之間)。


除非您可以按照上面鏈接的視頻中Scott Meyers的說明進(jìn)行移動優(yōu)化,但這與您可以使用的C ++的實際版本有關(guān)。


在GoingNative 2012會議的“ 互動小組:任何問題!”中對該討論進(jìn)行了重大更新。值得一看,尤其是從22:50開始。


查看完整回答
反對 回復(fù) 2020-02-03
?
哈士奇WWW

TA貢獻(xiàn)1799條經(jīng)驗 獲得超6個贊

這是赫伯·薩特的


準(zhǔn)則:除非您要使用或操縱智能指針本身,例如共享或轉(zhuǎn)讓所有權(quán),否則不要將智能指針作為函數(shù)參數(shù)傳遞。


準(zhǔn)則:表示函數(shù)將使用按值shared_ptr參數(shù)存儲和共享堆對象的所有權(quán)。


準(zhǔn)則:僅使用非常量shared_ptr&參數(shù)來修改shared_ptr。僅在不確定是否要復(fù)制并共享所有權(quán)時,才使用const shared_ptr&作為參數(shù)。否則,請改用widget *(或者,如果不能為null,則使用widget&)。


查看完整回答
反對 回復(fù) 2020-02-03
?
qq_花開花謝_0

TA貢獻(xiàn)1835條經(jīng)驗 獲得超7個贊

我跑到下面的代碼,一旦與foo服用shared_ptr的const&,并再次foo取shared_ptr的值。


void foo(const std::shared_ptr<int>& p)

{

    static int x = 0;

    *p = ++x;

}


int main()

{

    auto p = std::make_shared<int>();

    auto start = clock();

    for (int i = 0; i < 10000000; ++i)

    {

        foo(p);

    }    

    std::cout << "Took " << clock() - start << " ms" << std::endl;

}

在我的Intel Core 2 Quad(2.4GHz)處理器上使用VS2015,x86版本構(gòu)建


const shared_ptr&     - 10ms  

shared_ptr            - 281ms 

按值復(fù)制版本要慢一個數(shù)量級。

如果要從當(dāng)前線程同步調(diào)用函數(shù),請選擇const&版本。


查看完整回答
反對 回復(fù) 2020-02-03
  • 3 回答
  • 0 關(guān)注
  • 1304 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號