簡體   English   中英

正確的方法來初始化boost :: shared_ptr

[英]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 ,共享同一對象的所有權。

如果你需要獲得原始指針的所有權,你應該使用resetboost shared_ptr:operator =和reset之間的差異? )。

暫無
暫無

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

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