std::swap(std::shared_ptr)
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
Observers
(C++17)
(until C++20*)
(C++26)
(C++26)
Non-member functions
swap(std::shared_ptr)
(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)
Defined in header
<memory>
template< class T >
void swap( std::shared_ptr <T>& lhs, std::shared_ptr <T>& rhs ) noexcept;
(since C++11)
void swap( std::shared_ptr <T>& lhs, std::shared_ptr <T>& rhs ) noexcept;
Specializes the std::swap algorithm for std::shared_ptr . Swaps the contents of lhs and rhs. Calls lhs.swap(rhs).
[edit] Parameters
lhs, rhs
-
smart pointers whose contents to swap
[edit] Return value
(none)
[edit] Complexity
Constant.
[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(); std::swap (p1, p2); print(); p1.reset(); print(); std::swap (p1, p2); print(); }
Output:
Foo... Foo... p1=100 p2=200 p1=200 p2=100 ~Foo... p1=nullptr p2=100 p1=100 p2=nullptr ~Foo...