6
C ++ 17でstd :: make_uniqueを使用する理由
私が理解している限りでは、C ++ 14が導入さstd::make_uniqueれたのは、パラメーターの評価順序が指定されなかった結果、これが安全ではなかったためです。 f(std::unique_ptr<MyClass>(new MyClass(param)), g()); // Syntax A (説明:評価が最初にrawポインターにメモリを割り当て、次に呼び出しをg()行い、std::unique_ptr構築前に例外がスローされた場合、メモリがリークします。) 呼び出しstd::make_uniqueは呼び出し順序を制限する方法であり、これにより物事が安全になります。 f(std::make_unique<MyClass>(param), g()); // Syntax B それ以来、C ++ 17があまりにも構文Aの安全を作り、評価順序を明らかにしたので、ここで私の質問です:まだ使用する理由であるstd::make_unique以上std::unique_ptrの++ 17 Cでコンストラクタを?いくつか例を挙げていただけますか? 今のところ、私が想像できる唯一の理由は、それがMyClass一度だけタイプできることです(あなたがでポリモーフィズムに依存する必要がないと仮定するとstd::unique_ptr<Base>(new Derived(param)))。しかし、それはかなり弱い理由のようです、特にstd::make_uniqueがstd::unique_ptrコンストラクターを使用している削除者を指定できないです。 そして明確にするために、私はstd::make_unique標準ライブラリから削除することを支持することはしません(少なくとも後方互換性のためにそれを維持することは推奨しません)。std::unique_ptr
96
c++
c++17
unique-ptr