C 11 での make_unique 関数の再作成
C 11 標準では、一意のポインターを作成するための強力な関数 make_unique が導入されています。ただし、コンパイラがこの機能をサポートしていないという問題が発生する場合もあります。この記事では、C 11 で make_unique を実装するための回避策を提供します。
質問のように、make_unique 関数のプロトタイプは次のとおりです:
template unique_ptr make_unique( Args&&&... args );
次のコードは、 make_unique:
template
std::unique_ptr make_unique(Args&&... args)
{
return std::unique_ptr(new T(std::forward(args)...));
}
この実装では、std::forward 関数を使用して、参照や右辺値参照を含むすべてのタイプの引数に対して引数の転送が正しく行われるようにします。
コンパイラが C をサポートしている場合に注意してください。 11 ではなく、make_unique 関数ではない場合でも、この実装を回避策として使用できます。あるいは、C 14 以降をサポートするコンパイラにアクセスできる場合は、この目的で標準の std::make_unique 関数を利用することもできます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3