|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Modifiers | ||||
| Observers | ||||
| Non-member functions | ||||
(C++14)(C++20) | ||||
operator==operator!=operator<operator>operator<=operator>=operator<=> (until C++20)(C++20) | ||||
(C++20) | ||||
| Helper classes | ||||
Defined in header <memory> | ||
template<class T1,class D1,class T2,class D2> bool operator==(const unique_ptr<T1, D1>& x,const unique_ptr<T2, D2>& y); | (1) | (since C++11) (constexpr since C++23) |
template<class T1,class D1,class T2,class D2> bool operator!=(const unique_ptr<T1, D1>& x,const unique_ptr<T2, D2>& y); | (2) | (since C++11) (until C++20) |
template<class T1,class D1,class T2,class D2> bool operator<(const unique_ptr<T1, D1>& x,const unique_ptr<T2, D2>& y); | (3) | (since C++11) |
template<class T1,class D1,class T2,class D2> bool operator<=(const unique_ptr<T1, D1>& x,const unique_ptr<T2, D2>& y); | (4) | (since C++11) |
template<class T1,class D1,class T2,class D2> bool operator>(const unique_ptr<T1, D1>& x,const unique_ptr<T2, D2>& y); | (5) | (since C++11) |
template<class T1,class D1,class T2,class D2> bool operator>=(const unique_ptr<T1, D1>& x,const unique_ptr<T2, D2>& y); | (6) | (since C++11) |
template<class T1,class D1,class T2,class D2> requiresstd::three_way_comparable_with< | (7) | (since C++20) |
template<class T,class D> bool operator==(const unique_ptr<T, D>& x,std::nullptr_t)noexcept; | (8) | (since C++11) (constexpr since C++23) |
template<class T,class D> bool operator==(std::nullptr_t,const unique_ptr<T, D>& x)noexcept; | (9) | (since C++11) (until C++20) |
template<class T,class D> bool operator!=(const unique_ptr<T, D>& x,std::nullptr_t)noexcept; | (10) | (since C++11) (until C++20) |
template<class T,class D> bool operator!=(std::nullptr_t,const unique_ptr<T, D>& x)noexcept; | (11) | (since C++11) (until C++20) |
template<class T,class D> bool operator<(const unique_ptr<T, D>& x,std::nullptr_t); | (12) | (since C++11) (constexpr since C++23) |
template<class T,class D> bool operator<(std::nullptr_t,const unique_ptr<T, D>& y); | (13) | (since C++11) (constexpr since C++23) |
template<class T,class D> bool operator<=(const unique_ptr<T, D>& x,std::nullptr_t); | (14) | (since C++11) (constexpr since C++23) |
template<class T,class D> bool operator<=(std::nullptr_t,const unique_ptr<T, D>& y); | (15) | (since C++11) (constexpr since C++23) |
template<class T,class D> bool operator>(const unique_ptr<T, D>& x,std::nullptr_t); | (16) | (since C++11) (constexpr since C++23) |
template<class T,class D> bool operator>(std::nullptr_t,const unique_ptr<T, D>& y); | (17) | (since C++11) (constexpr since C++23) |
template<class T,class D> bool operator>=(const unique_ptr<T, D>& x,std::nullptr_t); | (18) | (since C++11) (constexpr since C++23) |
template<class T,class D> bool operator>=(std::nullptr_t,const unique_ptr<T, D>& y); | (19) | (since C++11) (constexpr since C++23) |
template<class T,class D> requiresstd::three_way_comparable<typename unique_ptr<T, D>::pointer> | (20) | (since C++20) (constexpr since C++23) |
Compares the pointer values of twounique_ptrs, or aunique_ptr andnullptr.
unique_ptrs.unique_ptr andnullptr.The | (since C++20) |
Contents |
| x, y | - | unique_ptrs to compare |
CT isstd::common_type<unique_ptr<T1, D1>::pointer, unique_ptr<T2, D2>::pointer>::type.#include <iostream>#include <memory> int main(){std::unique_ptr<int> p1(newint(42));std::unique_ptr<int> p2(newint(42)); std::cout<<std::boolalpha<<"(p1 == p1) : "<<(p1== p1)<<'\n'<<"(p1 <=> p1) == 0 : "<<((p1<=> p1)==0)<<'\n'// Since C++20 // p1 and p2 point to different memory locations, so p1 != p2<<"(p1 == p2) : "<<(p1== p2)<<'\n'<<"(p1 < p2) : "<<(p1< p2)<<'\n'<<"(p1 <=> p2) < 0 : "<<((p1<=> p2)<0)<<'\n'// Since C++20<<"(p1 <=> p2) == 0 : "<<((p1<=> p2)==0)<<'\n';// Since C++20}
Possible output:
(p1 == p1) : true(p1 <=> p1) == 0 : true(p1 == p2) : false(p1 < p2) : true(p1 <=> p2) < 0 : true(p1 <=> p2) == 0 : false
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 3426 | C++20 | operator<=>(unique_ptr, nullptr_t) was ill-formed | constraints and definition fixed |
| returns a pointer to the managed object (public member function)[edit] |