首頁 > 後端開發 > C++ > `make_shared` 與 `shared_ptr`:為什麼更有效率且異常安全?

`make_shared` 與 `shared_ptr`:為什麼更有效率且異常安全?

Mary-Kate Olsen
發布: 2024-12-14 12:19:11
原創
492 人瀏覽過

`make_shared` vs. `shared_ptr`: Why is One More Efficient and Exception-Safe?

make_shared和標準shared_ptr的差別

為什麼make_shared更有效率?

了解std::make_shared與標準shared_ptr相比的效率,我們來一步步考察他們的構建過程

使用標準的shared_ptr構造函數:

std::shared_ptr<Object> p2(new Object("foo"));
登入後複製
  • 執行Object("foo")的堆分配。
  • 使用原始資料建立新的 std::shared_ptr 控制塊指標。

使用 std::make_shared:

std::shared_ptr<Object> p1 = std::make_shared<Object>("foo");
登入後複製
  • std::shared_ptr 控制區塊和物件實例的單堆分配是已執行。

異常安全

在標準的shared_ptr構造方法中,如果在構造Object期間拋出異常,則不會執行任何清理,留下懸空記憶體。然而,std::make_shared 保證建構的 Object 和控制塊是單一分配的一部分,如果拋出異常,將會被清理。

std::make_shared 的缺點

  • 與使用標準的shared_ptr構造函數相比,增加了記憶體保留:由於std::make_shared執行單一分配,指向的記憶體無法被分配,指向的記憶體無法被分配釋放,直到控制塊不再使用。指向物件的弱指標可以使控制區塊保持活動狀態,從而可能導致延長記憶體保留時間。

以上是`make_shared` 與 `shared_ptr`:為什麼更有效率且異常安全?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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