- future[meta header]
- std[meta namespace]
- promise[meta class]
- function[meta id-type]
- cpp11[meta cpp]
~promise();
promise
オブジェクトの破棄
- まず共有状態が準備完了状態(
future_status::ready
)でなければ、error conditionとしてbroken_promise
を持つfuture_error
例外オブジェクトを格納したのち、準備完了状態にする。 - 共有状態を解放する。
#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
- Clang: ??
- GCC: 4.7.0 [mark verified]
- ICC: ??
- Visual C++: 2012 [mark verified]