簡體   English   中英

解除引用std :: tr1:shared_ptr與取消引用裸指針的任何打擊?

[英]Any hit for dereferencing std::tr1:shared_ptr vs. dereferencing a naked pointer?

我意識到創建,分配,復制和銷毀std :: tr1 :: shared_ptr或boost :: shared_ptr(由於引用計數機制)會產生(有時很重要)性能損失。 是否正確,一旦構造,訪問由shared_ptr包裝的指針沒有性能損失?

換句話說:給定

std::tr1::shared_ptr<myClass> SharedA(new myClass);
myClass *NakedA = new myClass;

SharedA->someClassMember

有相同的開銷

NakedA->someClassMember

在沒有調試支持的優化構建中,不應該有任何開銷。 您可以通過查看您正在使用的實現來了解。 有可能,它的operator-> overload只返回指向指向對象的指針,它的operator* overload只是取消引用這個指針。

(這就是std::shared_ptr的Visual C ++ 2010實現:每個重載的運算符只調用一個只返回指針的“get”函數;沒有任何類型的鎖定或其他開銷。其他實現可能不同。)

未經優化的構建可能不會內聯運算符重載,並且如果您的實現具有您啟用的額外調試支持,則它可能執行額外的檢查(例如,如果您取消引用空指針,則可能是斷言)。

可以內聯智能指針的所有成員函數,包括解除引用運算符。 任何好的編譯器都應該優化抽象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM