ホームページ >バックエンド開発 >C++ >C 11 に `std::make_unique` がないのはなぜですか?また、その実装で完全転送はどのように機能しますか?

C 11 に `std::make_unique` がないのはなぜですか?また、その実装で完全転送はどのように機能しますか?

DDD
DDDオリジナル
2024-12-30 00:30:12588ブラウズ

Why is `std::make_unique` Missing in C  11, and How Does Perfect Forwarding Work in its Implementation?

Make_unique と完全転送

Q: C 11 標準ライブラリに集中型の make_unique 関数がないのはなぜですか?

多くの人が、ユニークなポインタは不便です。例:

std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3));

次のような洗練された関数が好まれます:

auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3);

Q: ここでは make_unique の実装を試みていますが、std::forward に関する何かが壊れているように見えます。これは何をしているのでしょうか?また、どのように使用することになっていますか?

template<typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args)
{
    return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}

A: C 11 の std::make_unique の省略は見落としとして認められ、C 14 で追加されました。

std::forward(args) 式は、引数への人為的な参照を生成するために完全転送を使用します。 ...args を使用して、それらを T(std::forward(args)...) の新しい式に転送できるようにし、左辺値と右辺値の構築動作を統一します。

以上がC 11 に `std::make_unique` がないのはなぜですか?また、その実装で完全転送はどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。