Namespaces
Variants

std::stop_callback<Callback>:: ~stop_callback

From ja.cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
~stop_callback ( ) ;
(C++20以降)

stop_callbackオブジェクトを破棄します。

* this が関連する停止状態を持つ stop_token を持つ場合、それからコールバックを登録解除します。

コールバック関数が別のスレッドで同時に実行されている場合、デストラクタはコールバック関数の実行が完了するまで終了しません。コールバック関数がデストラクタと同じスレッドで実行されている場合、デストラクタはコールバック関数の実行完了を待たずに制御を返します(注記を参照)。

注記

stop_callbackのデストラクタは、競合状態とデッドロックを防止するように設計されています。他のスレッドが現在コールバックを実行中の場合、その完了までデストラクタは戻ることができません。さもなければ、関数オブジェクトが実行中に破棄される可能性があります。コールバック関数はコピー可能でも移動可能でもある必要はなく、登録後もstop_callbackオブジェクト自体に存在します。

一方で、現在デストラクタを呼び出しているスレッドがコールバックを呼び出しているスレッドと同じである場合、デストラクタは待機できません。さもなければデッドロックが発生する可能性があります。同じスレッドがコールバック関数を呼び出しながらstop_callbackを破棄することは可能であり有効です。なぜなら、コールバック関数自体が直接的または間接的にstop_callbackを破棄する可能性があるためです。