Skip to content

Latest commit

 

History

History
75 lines (62 loc) · 2.34 KB

op_constructor.md

File metadata and controls

75 lines (62 loc) · 2.34 KB

コンストラクタ

  • 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が停止状態を所有していれば、*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);
}
  • 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

処理系