![](/img/trans.png)
[英]correct way to initialize a variable of the type boost::shared_ptr<A>
[英]Correct way to initialize boost::shared_ptr
我剛剛開始使用boost::shared_ptr
所以我一直在搜索,我發現有幾種方法可以初始化它:
boost::shared_ptr<MyClass> myclass = boost::shared_ptr<MyClass>(new MyClass());
boost::shared_ptr<MyClass> myclass = new MyClass();
boost::shared_ptr<MyClass> myclass = boost::make_shared<MyClass>();
分配它:
boost::shared_ptr<MyClass> someOtherType::getMyClass();
boost::shared_ptr<MyClass> myclass = someOtherTypePointer->getMyClass();
boost::shared_ptr<MyClass> myclass = boost::make_shared<MyClass>(someOtherTypePointer->getMyClass());
哪一個是init / assign的首選方式,為什么?
謝謝。
(1) boost::shared_ptr<MyClass> c(boost::shared_ptr<MyClass>(new MyClass()));
(2) boost::shared_ptr<MyClass> c(new MyClass());
(3) boost::shared_ptr<MyClass> c(boost::make_shared<MyClass>());
第一個是不必要的復雜。
(2)和(3)看似相似,但只要你可以使用make_shared
(即當你不需要自定義刪除器時: 使用make_shared創建shared_ptr是否有任何缺點 )。
make_shared
:
MyClass
對象和shared_ptr
的控制塊分配內存,只需一次內存分配。 相反, (2)執行至少兩次存儲器分配。 因此make_shared
減少了分配開銷,內存碎片並改善了局部性(參見GotW#89第2點) new
(並且,至少在C ++ 11中,它更清楚: auto c(std::make_shared<MyClass>());
)。 分配的主要用途是當您要復制先前存在的boost::shared_ptr
,共享同一對象的所有權。
如果你需要獲得原始指針的所有權,你應該使用reset
( boost shared_ptr:operator =和reset之間的差異? )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.