1. ホーム
  2. c++

[解決済み】make_uniqueとパーフェクトフォワーディング

2022-04-07 18:56:06

質問

がないのはなぜ? std::make_unique C++11の標準ライブラリにある関数テンプレート?見つける

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

少し冗長ですが、以下のようにすれば、もっとすっきりするのではないでしょうか?

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

を隠すことができます。 new をうまく使って、一度だけタイプに触れています。

とにかく、以下は私が試行錯誤して実装した make_unique :

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

を取得するのに結構時間がかかりました。 std::forward のものがコンパイルされましたが、正しいかどうかわかりません。そうなんですか?具体的にはどのような std::forward<Args>(args)... とはどういう意味ですか?コンパイラはそれをどう判断するのでしょうか?

どのように解決するのですか?

C++標準化委員会の委員長であるハーブ・サッター氏は、自身のブログで次のように書いている。 ブログ :

C++11には含まれていないこと make_unique は見落としの部分があり、将来的にはほぼ間違いなく追加されるでしょう。

また、OPが与えたものと同一の実装を与えている。

編集する std::make_unique の一部となりました。 C++14 .