Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::weak_ptr<T>::swap

      From cppreference.com
      <cpp‎ |memory‎ |weak ptr
       
       
      Memory management library
      (exposition only*)
      Allocators
      Uninitialized memory algorithms
      Constrained uninitialized memory algorithms
      Memory resources
      Uninitialized storage(until C++20)
      (until C++20*)
      (until C++20*)
      Garbage collector support(until C++23)
      (C++11)(until C++23)
      (C++11)(until C++23)
      (C++11)(until C++23)
      (C++11)(until C++23)
      (C++11)(until C++23)
      (C++11)(until C++23)
       
       
      void swap( weak_ptr& r)noexcept;
      (since C++11)

      Exchanges the stored pointer values and the ownerships of*this andr. Reference counts, if any, are not adjusted.

      [edit]Parameters

      r - smart pointer to exchange the contents with

      [edit]Return value

      (none)

      [edit]Example

      Run this code
      #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(){returnstd::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();}

      Output:

      Foo...Foo... p1=100 p2=200 p1=200 p2=100 p1=nullptr p2=100 p1=100 p2=nullptr~Foo...~Foo...
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/memory/weak_ptr/swap&oldid=153993"

      [8]ページ先頭

      ©2009-2025 Movatter.jp