最終更新日時: 2025年07月12日 02時16分44秒 (JST)
Koichi Murase が更新

履歴 編集

function
<future>

# std::shared_future::operator=(C++11)

    shared_future& operator=(const shared_future& rhs);     // (1)
    shared_future& operator=(shared_future&& rhs) noexcept; // (2)

## 概要

- (1) : コピー代入。
- (2) : ムーブ代入。

## 効果

- (1) : 共有状態を解放し、`rhs`の共有状態を含むコンテンツを`*this`にコピー代入する。`rhs`と`*this`が同じ共有状態を参照するようになる。

## 事後条件

- (1) : `valid() == rhs.valid()`
- (2) : `valid()`の戻り値が、この関数を呼び出す前の`rhs.valid()`と等価になること。`rhs.valid() == false`になること。

## 例外

- (2) : 投げない

## 戻り値

`*this`

## 例

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

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

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

        f2 = f1; // コピー

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

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

      // ムーブ代入(共有状態の移動)
      {
        std::promise<int> p;
        std::shared_future<int> f1 = p.get_future();

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

        p.set_value(3);

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

### 出力

## バージョン

### 言語

- C++11

### 処理系

- Clang: ??
- GCC: 4.7.0 ✅
- ICC: ??
- Visual C++: 2012 ✅

## 参照