~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();
}
xxxxxxxxxx
#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_error: Broken promise
バージョン
言語
- C++11
処理系
- Clang: ??
- GCC: 4.7.0 ✅
- ICC: ??
- Visual C++: 2012 ✅