ホームページ > バックエンド開発 > C++ > C 11 でカスタム `make_unique` 関数を実装するには?

C 11 でカスタム `make_unique` 関数を実装するには?

Linda Hamilton
リリース: 2024-10-30 00:03:29
オリジナル
759 人が閲覧しました

How to Implement a Custom `make_unique` Function in C  11?

C での make_unique のカスタム実装の作成 11

make_unique 関数は、C で一意のポインターを作成および管理するための便利な方法です。これにより、プログラマーは、所有権が適切に転送されることを保証しながら、指定されたオブジェクトのコンストラクターに引数を直接渡すことができます。ただし、一部のコンパイラは make_unique をネイティブにサポートしていない場合があります。このような場合、関数のカスタム バージョンを実装する必要があります。

カスタム 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート