std::unique_ptr メンバーを使用したカスタム デリーター
C では、 std::unique_ptr クラスはポインターの所有権を管理する便利な方法を提供します。 -ベースのオブジェクト。ただし、カスタマイズされた削除プロセスが必要なサードパーティ オブジェクトを使用している場合、 std::unique_ptr をクラスのメンバーとして使用するときに問題に直面する可能性があります。
次のシナリオを考えてみましょう。 std::unique_ptr
スタンドアロン関数のこのようなシナリオで std::unique_ptr を利用するには、次のようにします。カスタム デリーターを使用できます:
void foo() { std::unique_ptr<Bar, void (*)(Bar*)> bar(create(), [](Bar* b) { destroy(b); }); ... }
しかし、std::unique_ptr がclass?
クラス メンバーのカスタム デリーター
create と destroy は次のシグネチャを持つ無料関数であると仮定します:
Bar* create(); void destroy(Bar*);
次のように定義できます。 Foo クラスを次のように記述します。
class Foo { std::unique_ptr<Bar, void (*)(Bar*)> ptr_; // ... public: Foo() : ptr_(create(), destroy) { /* ... */ } // ... };
この実装では、 destroy 関数は、std::unique_ptr のデリーターとして使用されます。無料の関数をデリーターとして使用すると、ラムダやカスタムのデリーター クラスが必要なくなります。
以上がC クラスの std::unique_ptr メンバーでカスタム デリーターを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。