2010-09-24 62 views
2

某處我看到一篇關於創建boost shared_ptr的優化方式的帖子,以便它同時分配ptr管道和pointee。我做了SO搜索,但有很多職位shared_ptr,我無法找到它。請有人聰明請轉貼shared_ptr分配優化

編輯: 感謝您的回答。額外的信用問題。什麼是返回null shared_ptr的正確(首選?)成語?即

FooPtr Func() 
{ 
    if(some_bad_thing) 
     return xxx; // null 
} 

return FooPtr((Foo*)0); 

看起來有點klunky

+2

我會使用默認ctor作爲shared_ptr,或者調用沒有參數的make_shared。 – 2010-09-24 23:27:23

回答

6

boost::make_shared()

除了方便和風格,這樣的功能也異常安全,且速度更快,因爲它可以爲對象及其相應的控制塊使用單個分配,消除爲shared_ptr構建開銷的重要部分。這消除了關於shared_ptr的主要效率投訴之一。

+4

[有關一般信息:請注意,利用此優勢存在一個很大的潛在問題:分配給對象的存儲不能被解除分配,直到沒有強或弱引用爲止,因爲引用計數結構與擁有對象。使用普通的'shared_ptr'結構,一旦沒有更強的引用,存儲就可以被解除分配。這只是需要記住的一點:如果你有很大的對象,並且可能會有弱引用持續一段時間,這可能是一個問題。] – 2010-09-24 23:53:19