名前空間
変種
操作

std::weak_ptr<T>::swap

From cppreference.com
< cpp‎ | memory‎ | weak ptr
 
 
メモリ管理ライブラリ
(説明用*)
未初期化メモリのアルゴリズム
(C++17)
(C++17)
(C++17)
制約付き未初期化
メモリアルゴリズム
Cライブラリ

アロケータ
メモリリソース
ガベージコレクションのサポート
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
未初期化ストレージ
(C++20まで*)
(C++20まで*)
明示的な生存期間管理
 
 
void swap( weak_ptr& r ) noexcept;
(C++11以降)

現在(*this)とrの保持するポインタ値と所有権を交換します。参照カウントは調整されません。

[編集] パラメータ

r - 内容を交換するスマートポインタ

[編集] 戻り値

(なし)

[編集]

#include <iostream>
#include <memory>
#include <string>
 
struct Foo
{
    Foo(int _val) : val(_val) { std::cout << "Foo...\n"; }
    ~Foo() { std::cout << "~Foo...\n"; }
    std::string print() { return std::to_string(val); }
    int val;
};
 
int main()
{
    std::shared_ptr<Foo> sp1 = std::make_shared<Foo>(100);
    std::shared_ptr<Foo> sp2 = std::make_shared<Foo>(200);
    std::weak_ptr<Foo> wp1 = sp1;
    std::weak_ptr<Foo> wp2 = sp2;
    auto print = [&]()
    {
        auto p1 = wp1.lock();
        auto p2 = wp2.lock();
        std::cout << " p1=" << (p1 ? p1->print() : "nullptr");
        std::cout << " p2=" << (p2 ? p2->print() : "nullptr") << '\n';  
    };
    print();
 
    wp1.swap(wp2);
    print();
 
    wp1.reset();
    print();
 
    wp1.swap(wp2);
    print();   
}

出力

Foo...
Foo...
 p1=100 p2=200
 p1=200 p2=100
 p1=nullptr p2=100
 p1=100 p2=nullptr
~Foo...
~Foo...
English 日本語 中文(简体) 中文(繁體)