std::unique_ptr::swap(3)

NAME
std::unique_ptr::swap - std::unique_ptr::swap

Synopsis
   void swap( unique_ptr& other ) noexcept; (since C++11)
   Swaps the managed objects and associated deleters of *this and another unique_ptr
   object other.

Parameters
   other - another unique_ptr object to swap the managed object and the deleter with

Return value
   (none)

Example
// Run this code
 #include <iostream>
 #include <memory>
 struct Foo
 {
     Foo(int _val) : val(_val) { std::cout << "Foo...\n"; }
     ~Foo() { std::cout << "~Foo...\n"; }
     int val;
 };
 int main()
 {
     std::unique_ptr<Foo> up1(new Foo(1));
     std::unique_ptr<Foo> up2(new Foo(2));
     up1.swap(up2);
     std::cout << "up1->val:" << up1->val << '\n';
     std::cout << "up2->val:" << up2->val << '\n';
 }

Output:
 Foo...
 Foo...
 up1->val:2
 up2->val:1
 ~Foo...
 ~Foo...