std::unique_ptr メンバーでカスタム デリーターを使用する
プログラミングでは、std::unique_ptr メンバーでカスタム デリーターを利用すると、より優れた機能を提供できます。オブジェクトの破壊を制御します。この記事は、クラス構造内にカスタム デリーターを組み込む方法という問題に対処することを目的としています。
クラス Foo に 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 サイトの他の関連記事を参照してください。