最終更新日時: 2025年10月14日 14時41分25秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<memory>

# std::weak_ptr::swap(C++11)

    void
      swap(weak_ptr& r) noexcept; // (1) C++11
    constexpr void
      swap(weak_ptr& r) noexcept; // (1) C++26

## 概要

他の`weak_ptr`オブジェクトとデータを入れ替える。

## 効果

`*this`と`r`の監視対象を入れ替える。

## 戻り値

なし

## 例外

投げない

## 例

    #include <iostream>
    #include <memory>

    int main()
    {
      std::shared_ptr<int> sp1(new int(1));
      std::weak_ptr<int> wp1 = sp1;

      std::shared_ptr<int> sp2(new int(2));
      std::weak_ptr<int> wp2 = sp2;

      if (std::shared_ptr<int> r = wp1.lock()) {
        std::cout << r << std::endl;
      }

      if (std::shared_ptr<int> r = wp2.lock()) {
        std::cout << r << std::endl;
      }

      // wp1とwp2を入れ替える
      wp1.swap(wp2);

      if (std::shared_ptr<int> r = wp1.lock()) {
        std::cout << r << std::endl;
      }

      if (std::shared_ptr<int> r = wp2.lock()) {
        std::cout << r << std::endl;
      }
    }

### 出力例

    0x14ab010
    0x14ab060
    0x14ab060
    0x14ab010

## バージョン

### 言語

- C++11

### 処理系

- GCC: 4.3.6 ✅
- Clang: 3.0 ✅
- ICC: ?
- Visual C++: ?

## 参照

- P3037R6 `constexpr std::shared_ptr` and friends