了解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構造:
std::make_sha red用法:
關鍵區別在於所需的堆分配區別在於所需的堆分配數量:
make_shared 中的這種單一分配消除了對顯式新調用的需要,從而提高了效率。
Pre-C 17:
異常處理以前可能會造成影響造成嚴重破壞,因為原始指針可能無法安全地傳遞給共享指針構造函數。
C 17 及更高版本:
由於函數參數求值順序的更改,此問題已解決。如今,異常得到了妥善處理,確保了記憶體完整性。
正如Casey 指出的,一個潛在的缺點源於單一分配:
以上是`std::make_shared` 與 `std::shared_ptr`:哪個更有效率?的詳細內容。更多資訊請關注PHP中文網其他相關文章!