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

履歴 編集

function
<stop_token>

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

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_sourceget_token()メンバ関数を呼び出して、stop_sourceと停止状態を共有するstop_tokenを構築する必要がある)
  • (2) : コピーコンストラクタ。
  • (3) : ムーブコンストラクタ。

事後条件

  • (1) : stop_possible() == false かつ stop_requested() == false
  • (2) : *this == rhs。(rhsが停止状態を所有していれば、*thisrhsは同じ停止状態を共有するようになる)
  • (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

処理系