std::swap(std::unique_ptr)
From cppreference.com
< cpp | memory | unique 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::unique_ptr
(C++14)(C++20)
(until C++20)(C++20)
(C++20)
swap(std::unique_ptr)
Defined in header
<memory>
template< class T, class D >
void swap( std::unique_ptr <T, D>& lhs, std::unique_ptr <T, D>& rhs ) noexcept;
(since C++11) void swap( std::unique_ptr <T, D>& lhs, std::unique_ptr <T, D>& rhs ) noexcept;
(constexpr since C++23)
Specializes the std::swap algorithm for std::unique_ptr . Swaps the contents of lhs and rhs. Calls lhs.swap(rhs).
This function does not participate in overload resolution unless std::is_swappable_v <D> is true.
(since C++17)[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::unique_ptr <Foo> p1 = std::make_unique <Foo>(100); std::unique_ptr <Foo> p2 = std::make_unique <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...