std::shared_ptr<T>::swap
From cppreference.com
< cpp | memory | shared ptr
C++
Feature test macros (C++20)
Concepts library (C++20)
Metaprogramming library (C++11)
Ranges library (C++20)
Filesystem library (C++17)
Concurrency support library (C++11)
Execution control library (C++26)
Memory management library
(exposition only*)
(C++11)
(C++23)
(C++11)
(C++17)
(C++11)
(C++11)
(C++20)
(C++20)
(C++17)
(C++11)
(C++17)
(C++20)
(C++17)
(C++17)
(C++17)
(C++17)
(C++17)
(C++17)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++17)
(C++17)
(C++17)
(C++17)
(C++17)
(C++17)
(C++17)
(C++17)
Uninitialized storage (until C++20)
(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)
(C++11)
(C++11)
(C++17)
(C++20)
(C++17)
(C++11)
(C++11)
(C++11)
(until C++17*)
(C++11)
(C++17)
(C++26)
(C++26)
(C++11)
(C++11)
(C++11)
(C++23)
(C++23)
(C++11)
(C++20)
(C++11)
(C++11)
(C++20)
(C++26)
std::shared_ptr
Member functions
Modifiers
shared_ptr::swap
Observers
(C++17)
(until C++20*)
(C++26)
(C++26)
Non-member functions
(until C++20)(until C++20)(until C++20)(until C++20)(until C++20)(C++20)
functions (until C++26*)
Helper classes
(C++20)
Deduction guides (C++17)
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.
[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() { 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...