Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::weak_ptr::swap(3)	      C++ Standard Libary	std::weak_ptr::swap(3)

NAME
       std::weak_ptr::swap - std::weak_ptr::swap

Synopsis
	  void swap( weak_ptr& r ) noexcept;  (since C++11)

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

Parameters
	  r - smart pointer to exchange	the contents with

Return value
	  (none)

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()	{ 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();
	}

Output:
	Foo...
	Foo...
	 p1=100	p2=200
	 p1=200	p2=100
	 p1=nullptr p2=100
	 p1=100	p2=nullptr
	~Foo...
	~Foo...

http://cppreference.com		  2022.07.31		std::weak_ptr::swap(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::weak_ptr::swap&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help