最終更新日時:
が更新

履歴 編集

function
<future>

std::shared_future::コンストラクタ(C++11)

shared_future() noexcept;                    // (1)
shared_future(const shared_future& rhs);     // (2)
shared_future(future<R>&&) noexcept;         // (3)
shared_future(shared_future&& rhs) noexcept; // (4)

shared_futureオブジェクトの構築

  • (1) : デフォルトコンストラクタ。共有状態を持たない空のshared_futureオブジェクトを生成する。
  • (2) : コピーコンストラクタ。rhsと同じ共有状態を参照するshared_futureオブジェクトを生成する。
  • (3), (4) : ムーブコンストラクタ。rhsの共有状態への参照を*thisに移動してshared_futureオブジェクトを生成する。

事後条件

#include <cassert>
#include <future>
#include <utility>

int main()
{
  // デフォルト構築
  {
    std::shared_future<int> f;
  }

  // コピー構築(同じ共有状態を参照する)
  {
    std::promise<int> p;

    std::shared_future<int> f1 = p.get_future().share();
    std::shared_future<int> f2 = f1; // コピー

    // 1つのpromiseによって書き込まれた結果値を、
    // 複数のshared_futureオブジェクトで読み取る
    p.set_value(3);

    assert(f1.get() == 3);
    assert(f2.get() == 3);
  }

  // ムーブ構築(共有状態の移動)
  {
    std::promise<int> p;

    // futureからshared_futureに共有状態を移動。
    // fは共有状態を持たなくなる
    std::future<int> f = p.get_future();
    std::shared_future<int> f1 = std::move(f);

    // shared_futureから共有状態を移動
    // f1は共有状態を持たなくなる
    std::shared_future<int> f2 = std::move(f1);

    p.set_value(3);

    assert(f2.get() == 3);
  }
}

出力

バージョン

言語

  • C++11

処理系

参照