最終更新日時(UTC):
が更新

履歴 編集

function
<stop_token>

std::stop_source::コンストラクタ(C++20)

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が停止状態を所有していれば、*thisrhsは同じ停止状態を共有するようになる)
  • (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

処理系