![](/img/trans.png)
[英]How to handle evolving c++ std:: namespace? e.g.: std::tr1::shared_ptr vs. std::shared_ptr vs. boost::shared_ptr vs. boost::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.