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

NAME
     std::shared_ptr::swap - std::shared_ptr::swap

Synopsis
	void swap( shared_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> p1 = std::make_shared<Foo>(100);
	  std::shared_ptr<Foo> p2 = std::make_shared<Foo>(200);
	  auto print = [&]()
	  {
	      std::cout << " p1=" << (p1 ? p1->print() : "nullptr");
	      std::cout << " p2=" << (p2 ? p2->print() : "nullptr") << '\n';
	  };
	  print();

	  p1.swap(p2);
	  print();

	  p1.reset();
	  print();

	  p1.swap(p2);
	  print();
      }

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

http://cppreference.com 	   2024.06.10		std::shared_ptr::swap(3)

home | help