ホームページ > バックエンド開発 > C++ > 複雑であるにもかかわらず、`std::make_unique` が C への貴重な追加機能であるのはなぜですか?

複雑であるにもかかわらず、`std::make_unique` が C への貴重な追加機能であるのはなぜですか?

DDD
リリース: 2024-12-16 06:06:16
オリジナル
629 人が閲覧しました

Why is `std::make_unique` a valuable addition to C   despite its complexity?

std::make_unique: 標準ライブラリの利便性が欠けている

C 11 標準ライブラリには std::make_unique 関数テンプレートがないため、開発者は作成するために冗長なコードを記述する必要があります。ユニークなポインタ。次の例を考えてみましょう:

std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3));
ログイン後にコピー

この冗長性を軽減するために、一部の開発者は make_unique 関数を提案しました:

auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3);
ログイン後にコピー

この構文は new 演算子を非表示にし、型については 1 回だけ言及します。

ただし、このような機能を実装するには、完全転送の複雑さを理解する必要があります。具体的には、std::forward 式:

std::forward<Args>(args)...
ログイン後にコピー

には次の操作が含まれます。

  • std::forwardは、Args の左辺値または右辺値参照を結果に転送する型変換式です。
  • std::forward(args) は、args 内の対応する引数を転送することによって Args を推定および構築する関数呼び出し式です。
  • ... 転送された引数をパラメータ パックに解凍します。

要約すると、次のようになります。 std::forward<Args>(args)... により、コンストラクターへの引数の完全な転送が可能になります。

以上が複雑であるにもかかわらず、`std::make_unique` が C への貴重な追加機能であるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート