stop_source(); // (1)
explicit stop_source(nostopstate_t) noexcept; // (2)
stop_source(const stop_source& rhs) noexcept; // (3)
stop_source(stop_source&& rhs) noexcept; // (4)
概要
- (1) : デフォルトコンストラクタ。停止状態を表すリソースを新たに確保して所有する。
- (2) : 停止状態を表すリソースを確保しないコンストラクタ。
- (3) : コピーコンストラクタ。
- (4) : ムーブコンストラクタ。
事後条件
- (1) :
stop_possible() == true
かつstop_requested() == false
。 - (2) :
stop_possible() == false
かつstop_requested() == false
。 - (2) :
*this == rhs
。(rhs
が停止状態を所有していれば、*this
とrhs
は同じ停止状態を共有するようになる) - (4) : もし
rhs
が停止状態を所有していればその所有権が*this
へ移動し、rhs.stop_possible() == false
となる。
例外
- (1) : 停止状態を表すリソースを確保できなかった場合は、
bad_alloc
を投げる。 - (2) : 投げない。
- (3) : 投げない。
- (4) : 投げない。
例
#include <cassert>
#include <stop_token>
int main()
{
std::stop_source ss1;
std::stop_source ss2(std::nostopstate);
std::stop_source ss3 = ss1;
std::stop_source ss4 = std::move(ss1);
assert(ss1.stop_possible() == false);
assert(ss2.stop_possible() == false);
assert(ss3.stop_possible() == true);
assert(ss4.stop_possible() == true);
ss3.request_stop();
assert(ss3.stop_requested() == true);
assert(ss4.stop_requested() == true);
}
出力
バージョン
言語
- C++20
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??