ホームページ > バックエンド開発 > C++ > `std::unique_ptr` メンバー変数でカスタム デリーターを使用する方法 「」

`std::unique_ptr` メンバー変数でカスタム デリーターを使用する方法 「」

Barbara Streisand
リリース: 2024-12-15 17:07:11
オリジナル
749 人が閲覧しました

How to Use Custom Deleters with `std::unique_ptr` Member Variables?
```

std::unique_ptr メンバー変数を使用したカスタム デリーターの使用

特定の削除メカニズムを必要とするサードパーティ クラスを使用する場合、次の操作が必要なシナリオが発生する可能性があります。 std::unique_ptr メンバー変数を持つカスタム デリーターを使用します。この記事では、これを達成するための解決策を提供します。

問題

std::unique_ptr 型のメンバー変数を持つクラス Foo があると想像してください。このシナリオでは、サードパーティ クラス Bar には、オブジェクトの作成と破棄のための専用の create() 関数と destroy() 関数があります。

スタンドアロン関数の例

スタンドアロン関数では、以下を使用できます。次のような std::unique_ptr を持つカスタム デリーター:

void foo() {
    std::unique_ptr<Bar, void(*)(Bar*)> bar(create(), [](Bar* b){ destroy(b); });
    ...
}
ログイン後にコピー

メンバーでのカスタム デリーターの使用変数

メンバー変数を操作するときに同じ機能を実現するには、次の解決策があります:

class Foo {

    std::unique_ptr<Bar, void(*)(Bar*)> ptr_;

    // ...

public:

    Foo() : ptr_(create(), destroy) { /* ... */ }

    // ...
};
ログイン後にコピー

このコード内:

  • ptr_ メンバー変数が宣言されていますBar 型の unique_ptr として。
  • カスタム デリーターは 2 番目のテンプレート パラメーターとして指定されます。 void(*)(Bar*) というシグネチャを持つ関数ポインター。
  • クラス コンストラクターは、create() 関数と destroy() 関数をデリーターとして使用して ptr_ を初期化します。

これこのアプローチにより、std::unique_ptr メンバー変数のカスタム デリーターを便利に利用できるようになり、サードパーティ クラスであっても適切なリソース管理が保証されます。

以上が`std::unique_ptr` メンバー変数でカスタム デリーターを使用する方法 「」の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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