首頁 > 後端開發 > C++ > `std::make_shared` 與 `std::shared_ptr`:哪個更有效率?

`std::make_shared` 與 `std::shared_ptr`:哪個更有效率?

Barbara Streisand
發布: 2024-12-14 02:04:10
原創
643 人瀏覽過

`std::make_shared` vs. `std::shared_ptr`: Which is More Efficient?

辨別std::make_shared 與直接std::shared_ptr 使用的效率

了解std::make_shared 與直接建構std 之間的效率差異: :shared_ptr 可能是一項令人困惑的任務。在這裡,我們深入進行詳細比較,以闡明每種方法的複雜性。

探索建構順序

考慮以下程式碼片段:

std::shared_ptr<Object> p1 = std::make_shared<Object>("foo");
std::shared_ptr<Object> p2(new Object("foo"));
登入後複製

直接std::shared_ptr構造:

  1. 物件的堆疊分配
  2. 共用指標建構函數,為元資料分配另一個堆疊區域

std::make_sha red用法:

  1. 組合堆分配,包含物件和元資料

揭示效率增益

關鍵區別在於所需的堆分配區別在於所需的堆分配數量:

  • make_shared: 1 分配
  • 直接shared_ptr: 2 分配

make_shared 中的這種單一分配消除了對顯式新調用的需要,從而提高了效率。

異常注意事項

Pre-C 17:
異常處理以前可能會造成影響造成嚴重破壞,因為原始指針可能無法安全地傳遞給共享指針構造函數。

C 17 及更高版本:
由於函數參數求值順序的更改,此問題已解決。如今,異常得到了妥善處理,確保了記憶體完整性。

std::make_shared 的一個小缺點

正如Casey 指出的,一個潛在的缺點源於單一分配:

  • 在控制塊不再使用之前,受控記憶體無法釋放,由於弱指針,可能會延長記憶體保留時間參考文獻。

以上是`std::make_shared` 與 `std::shared_ptr`:哪個更有效率?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板