std::swap(std::shared_ptr) - cppreference.com (original) (raw)

From cppreference.com

< cpp‎ | memory‎ | shared ptr

[edit template]

C++

Compiler support
Freestanding and hosted
Language
Standard library
Standard library headers
Named requirements
Feature test macros (C++20)
Language support library
Concepts library (C++20)
Diagnostics library
Memory management library
Metaprogramming library (C++11)
General utilities library
Containers library
Iterators library
Ranges library (C++20)
Algorithms library
Strings library
Text processing library
Numerics library
Date and time library
Input/output library
Filesystem library (C++17)
Concurrency support library (C++11)
Execution control library (C++26)
Technical specifications
Symbols index
External libraries

[edit]

Memory management library

voidify(exposition only*) Allocators allocator allocator_traits(C++11) allocation_result(C++23) scoped_allocator_adaptor(C++11) pmr::polymorphic_allocator(C++17) allocator_arg(C++11) uses_allocator(C++11) uses_allocator_construction_args(C++20) make_obj_using_allocator(C++20) uninitialized_construct_using_allocator(C++20) Uninitialized memory algorithms uninitialized_copy uninitialized_fill uninitialized_move(C++17) uninitialized_copy_n(C++11) uninitialized_fill_n uninitialized_move_n(C++17) construct_at(C++20) uninitialized_default_construct(C++17) uninitialized_value_construct(C++17) destroy(C++17) uninitialized_default_construct_n(C++17) uninitialized_value_construct_n(C++17) destroy_n(C++17) destroy_at(C++17) Constrained uninitialized memory algorithms ranges::uninitialized_copy(C++20) ranges::uninitialized_fill(C++20) ranges::uninitialized_move(C++20) ranges::uninitialized_copy_n(C++20) ranges::uninitialized_fill_n(C++20) ranges::uninitialized_move_n(C++20) ranges::construct_at(C++20) ranges::uninitialized_default_construct(C++20) ranges::uninitialized_value_construct(C++20) ranges::destroy(C++20) ranges::uninitialized_default_construct_n(C++20) ranges::uninitialized_value_construct_n(C++20) ranges::destroy_n(C++20) ranges::destroy_at(C++20) Memory resources pmr::memory_resource(C++17) pmr::get_default_resource(C++17) pmr::set_default_resource(C++17) pmr::new_delete_resource(C++17) pmr::pool_options(C++17) pmr::null_memory_resource(C++17) pmr::synchronized_pool_resource(C++17) pmr::unsynchronized_pool_resource(C++17) pmr::monotonic_buffer_resource(C++17) Explicit lifetime management start_lifetime_as(C++23) start_lifetime_as_array(C++23) Types for composite class design indirect(C++26) polymorphic(C++26) Uninitialized storage (until C++20) raw_storage_iterator(until C++20*) get_temporary_buffer(until C++20*) return_temporary_buffer(until C++20*) Garbage collector support (until C++23) declare_reachable(C++11)(until C++23) declare_no_pointers(C++11)(until C++23) pointer_safety(C++11)(until C++23) undeclare_reachable(C++11)(until C++23) undeclare_no_pointers(C++11)(until C++23) get_pointer_safety(C++11)(until C++23) Low level memory management operator newoperator new[] operator deleteoperator delete[] nothrow_t nothrow new_handler set_new_handler get_new_handler(C++11) bad_alloc bad_array_new_length(C++11) align_val_t(C++17) destroying_delete_t(C++20) launder(C++17) Smart pointers unique_ptr(C++11) shared_ptr(C++11) weak_ptr(C++11) auto_ptr(until C++17*) owner_less(C++11) owner_less(C++17) owner_hash(C++26) owner_equal(C++26) enable_shared_from_this(C++11) bad_weak_ptr(C++11) default_delete(C++11) out_ptr_t(C++23) inout_ptr_t(C++23) Miscellaneous pointer_traits(C++11) to_address(C++20) addressof(C++11) align(C++11) assume_aligned(C++20) is_sufficiently_aligned(C++26) C Library malloc calloc realloc free aligned_alloc(C++17)

[edit]

std::shared_ptr

Member functions
shared_ptr::shared_ptr
shared_ptr::~shared_ptr
shared_ptr::operator=
Modifiers
shared_ptr::reset
shared_ptr::swap
Observers
shared_ptr::get
shared_ptr::operator*shared_ptr::operator->
shared_ptr::operator[](C++17)
shared_ptr::use_count
shared_ptr::unique(until C++20*)
shared_ptr::operator bool
shared_ptr::owner_before
shared_ptr::owner_hash(C++26)
shared_ptr::owner_equal(C++26)
Non-member functions
swap(std::shared_ptr)
make_sharedmake_shared_for_overwrite(C++20)
allocate_sharedallocate_shared_for_overwrite(C++20)
static_pointer_castdynamic_pointer_castconst_pointer_castreinterpret_pointer_cast(C++17)
get_deleter
operator==operator!=operator<operator<=operator>operator>=operator<=>(until C++20)(until C++20)(until C++20)(until C++20)(until C++20)(C++20)
operator<<
atomic_xxxfunctions (until C++26*)
Helper classes
atomicstd::shared\_ptr(C++20)
hashstd::shared\_ptr
Deduction guides(C++17)

[edit]

| Defined in header | | | | ------------------------------------------------------------------------------------------------------------------------------------------------ | | ------------- | | template< class T > void swap( std::shared_ptr<T>& lhs, std::shared_ptr<T>& rhs ) noexcept; | | (since C++11) |

Specializes the std::swap algorithm for std::shared_ptr. Swaps the contents of lhs and rhs. Calls lhs.swap(rhs).

Contents

[edit] Parameters

lhs, rhs - smart pointers whose contents to swap

[edit] Return value

(none)

[edit] Complexity

Constant.

[edit] Example

Run this code

#include #include #include   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 p1 = std::make_shared(100); std::shared_ptr p2 = std::make_shared(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...

[edit] See also

swap swaps the values of two objects (function template) [edit]
swap swaps the contents (public member function) [edit]

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/memory/shared_ptr/swap2&oldid=160271"