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>(args)... により、コンストラクターへの引数の完全な転送が可能になります。
以上が複雑であるにもかかわらず、`std::make_unique` が C への貴重な追加機能であるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。