make_unique 関数は、C で一意のポインターを作成および管理するための便利な方法です。これにより、プログラマーは、所有権が適切に転送されることを保証しながら、指定されたオブジェクトのコンストラクターに引数を直接渡すことができます。ただし、一部のコンパイラは make_unique をネイティブにサポートしていない場合があります。このような場合、関数のカスタム バージョンを実装する必要があります。
カスタム 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)...)); }
このカスタム実装は、標準ライブラリの unique_ptr と new を利用して一意のポインターを作成します。 std::forward を使用して、引数を指定されたオブジェクトのコンストラクターに転送し、適切な値の転送を保証します。
カスタムの make_unique 関数は、ネイティブ バージョンと同様に動作します。ただし、特定のシナリオではいくつかの制限がある場合があります。 C 14 で追加されたネイティブの make_unique 関数は、カスタム実装には存在しない可能性のある特定のエッジ ケースや最適化に対応していることに注目してください。
代替カスタム実装。より多用途性を提供し、配列を処理します。これは、Stack Overflow の sasha.sochka による受け入れられた回答で見つけることができます:
template <typename T> std::unique_ptr<T> make_unique(T* ptr) { return std::unique_ptr<T>(ptr); } template <typename T, typename... Args> std::unique_ptr<T> make_unique(Args&&... args) { return std::unique_ptr<T>(new T(std::forward<Args>(args)...)); }
提供されたコード スニペットを利用することで、カスタムを実装できます。 C 11 の make_unique 関数。コンパイラでサポートされている場合はネイティブ実装が望ましいですが、ここで説明するカスタム バージョンは、必要に応じて実行可能なソリューションを提供します。
以上がC 11 でカスタム `make_unique` 関数を実装するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。