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

`std::unique_ptr` クラス メンバーでカスタム デリーターを使用する方法

Patricia Arquette
リリース: 2024-12-06 07:00:11
オリジナル
935 人が閲覧しました

How to Use Custom Deleters with `std::unique_ptr` Class Members?

std::unique_ptr メンバーでカスタム デリーターを使用する

プログラミングでは、std::unique_ptr メンバーでカスタム デリーターを利用すると、より優れた機能を提供できます。オブジェクトの破壊を制御します。この記事は、クラス構造内にカスタム デリーターを組み込む方法という問題に対処することを目的としています。

クラス Foo に std::unique_ptr 型のメンバーが含まれるシナリオを考えてみましょう。 Bar は、create() 関数と destroy() 関数の両方を提供するサードパーティ クラスです。スタンドアロン関数で std::unique_ptr を操作する場合、次の構文を使用できます。

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

このアプローチでは、ラムダ式を使用してカスタム デリーターを指定できます。疑問が生じます: std::unique_ptr がクラスのメンバーとして利用されているときにこの動作を複製する方法はありますか?

解決策: クラス メンバーのカスタム デリーター

作成と破棄が無料の関数であると仮定すると、次の解決策を実装できます:

class Foo {

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

    // ...

public:

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

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

このシナリオでは、カスタム デリーターはクラス定義内で直接提供されます。 destroy 関数はデリーターとして利用され、ラムダ式の必要性を無効にします。このアプローチにより、Foo オブジェクトがスコープ外になったときに Bar オブジェクトが適切に破棄されることが保証されます。

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

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