stop_token() noexcept; // (1)
stop_token(const stop_token& rhs) noexcept; // (2)
stop_token(stop_token&& rhs) noexcept; // (3)
概要
- (1) : デフォルトコンストラクタ。
stop_source
と停止状態を共有していないstop_token
を構築する。このとき、停止状態を扱うためのリソースは確保せず、停止要求を決して受け取らない状態になる。(停止要求を受け取れるstop_token
を構築するには、stop_source
のget_token()
メンバ関数を呼び出して、stop_source
と停止状態を共有するstop_token
を構築する必要がある) - (2) : コピーコンストラクタ。
- (3) : ムーブコンストラクタ。
事後条件
- (1) :
stop_possible() == false
かつstop_requested() == false
。 - (2) :
*this == rhs
。(rhs
が停止状態を所有していれば、*this
とrhs
は同じ停止状態を共有するようになる) - (3) : もし
rhs
が停止状態を所有していればその所有権が*this
へ移動し、rhs.stop_possible() == false
となる。
例外
投げない。
例
#include <cassert>
#include <stop_token>
int main()
{
// (1) デフォルトコンストラクタ
std::stop_token st1;
assert(st1.stop_possible() == false);
assert(st1.stop_requested() == false);
std::stop_source ss;
std::stop_token st2 = ss.get_token();
assert(st2.stop_possible() == true);
assert(st2.stop_requested() == false);
// (2) コピーコンストラクタ
std::stop_token st3 = st2;
assert(st3 == st2);
// (3) ムーブコンストラクタ
std::stop_token st4 = std::move(st2);
assert(st2.stop_possible() == false);
assert(st3 == st4);
ss.request_stop();
assert(st3.stop_requested() == true);
assert(st4.stop_requested() == true);
}
出力
バージョン
言語
- C++20
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??