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_shared使用法:
主な違いは、ヒープ割り当てrequired:
この単一の割り当てmake_shared では、明示的な新しい呼び出しの必要性がなくなり、その結果、
Pre-C 17:
生のポインタが安全にshared_ptrに渡されなかった可能性があるため、以前は例外処理が大混乱を引き起こす可能性がありました。コンストラクター。
C 17 およびその後:
この問題は、関数の引数の評価順序の変更により解決されました。現在、例外は適切に処理され、メモリの整合性が確保されています。
Casey が指摘したように、潜在的な欠点は単一の割り当てに起因します:
以上が`std::make_shared` と `std::shared_ptr`: どちらが効率的ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。