Skip to content

Latest commit

 

History

History
75 lines (57 loc) · 1.6 KB

op_destructor.md

File metadata and controls

75 lines (57 loc) · 1.6 KB

デストラクタ

  • future[meta header]
  • std[meta namespace]
  • promise[meta class]
  • function[meta id-type]
  • cpp11[meta cpp]
~promise();

概要

promiseオブジェクトの破棄

効果

  1. まず共有状態が準備完了状態(future_status::ready)でなければ、error conditionとしてbroken_promiseを持つfuture_error例外オブジェクトを格納したのち、準備完了状態にする。
  2. 共有状態を解放する。

#include <iostream>
#include <future>
#include <thread>
#include <utility>

void calc(std::promise<int> p)
{
  // 通常行う p.set_value() をしなかったとする

  // ここで promise のデストラクタが例外オブジェクトを書き込む
}

int main()
{
  std::promise<int> p;
  std::future<int> f = p.get_future();

  std::thread t(calc, std::move(p));

  try {
    // 上で書き込まれた例外が送出される
    std::cout << f.get() << std::endl;
  }
  catch (std::future_error& e) {
    std::cout << e.what() << std::endl;
  }

  t.join();
}
  • std::future[link /reference/future/future.md]
  • p.get_future()[link get_future.md]
  • std::move[link /reference/utility/move.md]
  • f.get()[link /reference/future/future/get.md]

出力例

std::future_error: Broken promise

バージョン

言語

  • C++11

処理系

参照