- stop_token[meta header]
- std[meta namespace]
- stop_source[meta class]
- function[meta id-type]
- cpp20[meta cpp]
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);
}
- std::move[link /reference/utility/move.md]
- std::stop_source[link ../stop_source.md]
- std::nostopstate[link ../nostopstate.md]
- stop_requested()[link stop_requested.md]
- request_stop()[link request_stop.md]
- C++20
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??