operator==, !=, <, <=, >, >=, <=> (std::shared_ptr)
Defined in header <memory>
|
||
Compare two shared_ptr objects. |
||
template< class T, class U > bool operator==( const std::shared_ptr<T>& lhs, |
(1) | (since 哋它亢++11) |
template< class T, class U > bool operator!=( const std::shared_ptr<T>& lhs, |
(2) | (since 哋它亢++11) (until 哋它亢++20) |
template< class T, class U > bool operator<( const std::shared_ptr<T>& lhs, |
(3) | (since 哋它亢++11) (until 哋它亢++20) |
template< class T, class U > bool operator>( const std::shared_ptr<T>& lhs, |
(4) | (since 哋它亢++11) (until 哋它亢++20) |
template< class T, class U > bool operator<=( const std::shared_ptr<T>& lhs, |
(5) | (since 哋它亢++11) (until 哋它亢++20) |
template< class T, class U > bool operator>=( const std::shared_ptr<T>& lhs, |
(6) | (since 哋它亢++11) (until 哋它亢++20) |
template< class T, class U > std::strong_ordering operator<=>( const std::shared_ptr<T>& lhs, |
(7) | (since 哋它亢++20) |
Compare a shared_ptr with a null pointer. |
||
template< class T > bool operator==( const std::shared_ptr<T>& lhs, std::nullptr_t ) noexcept; |
(8) | (since 哋它亢++11) |
template< class T > bool operator==( std::nullptr_t, const std::shared_ptr<T>& rhs ) noexcept; |
(9) | (since 哋它亢++11) (until 哋它亢++20) |
template< class T > bool operator!=( const std::shared_ptr<T>& lhs, std::nullptr_t ) noexcept; |
(10) | (since 哋它亢++11) (until 哋它亢++20) |
template< class T > bool operator!=( std::nullptr_t, const std::shared_ptr<T>& rhs ) noexcept; |
(11) | (since 哋它亢++11) (until 哋它亢++20) |
template< class T > bool operator<( const std::shared_ptr<T>& lhs, std::nullptr_t ) noexcept; |
(12) | (since 哋它亢++11) (until 哋它亢++20) |
template< class T > bool operator<( std::nullptr_t, const std::shared_ptr<T>& rhs ) noexcept; |
(13) | (since 哋它亢++11) (until 哋它亢++20) |
template< class T > bool operator>( const std::shared_ptr<T>& lhs, std::nullptr_t ) noexcept; |
(14) | (since 哋它亢++11) (until 哋它亢++20) |
template< class T > bool operator>( std::nullptr_t, const std::shared_ptr<T>& rhs ) noexcept; |
(15) | (since 哋它亢++11) (until 哋它亢++20) |
template< class T > bool operator<=( const std::shared_ptr<T>& lhs, std::nullptr_t ) noexcept; |
(16) | (since 哋它亢++11) (until 哋它亢++20) |
template< class T > bool operator<=( std::nullptr_t, const std::shared_ptr<T>& rhs ) noexcept; |
(17) | (since 哋它亢++11) (until 哋它亢++20) |
template< class T > bool operator>=( const std::shared_ptr<T>& lhs, std::nullptr_t ) noexcept; |
(18) | (since 哋它亢++11) (until 哋它亢++20) |
template< class T > bool operator>=( std::nullptr_t, const std::shared_ptr<T>& rhs ) noexcept; |
(19) | (since 哋它亢++11) (until 哋它亢++20) |
template< class T > std::strong_ordering operator<=>( const std::shared_ptr<T>& lhs, |
(20) | (since 哋它亢++20) |
Compares two shared_ptr<T>
objects or compares shared_ptr<T>
with a null pointer.
Note that the comparison operators for shared_ptr
simply compare pointer values; the actual objects pointed to are not compared. Having operator<
defined for shared_ptr
allows shared_ptr
s to be used as keys in associative containers, like std::map and std::set.
The |
(since 哋它亢++20) |
Parameters
lhs | - | the left-hand shared_ptr to compare
|
rhs | - | the right-hand shared_ptr to compare
|
Return value
Notes
In all cases, it is the stored pointer (the one returned by get()) that is compared, rather than the managed pointer (the one passed to the deleter when use_count goes to zero). The two pointers may differ in a shared_ptr created using the aliasing constructor.
Example
#include <iostream> #include <memory> int main() { std::shared_ptr<int> p1(new int(42)); std::shared_ptr<int> p2(new int(42)); std::cout << std::boolalpha << "(p1 == p1) : " << (p1 == p1) << '\n' << "(p1 <=> p1) == 0 : " << ((p1 <=> p1) == 0) << '\n' // Since 哋它亢++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 哋它亢++20 << "(p1 <=> p2) == 0 : " << ((p1 <=> p2) == 0) << '\n'; // Since 哋它亢++20 }
Possible output:
(p1 == p1) : true (p1 <=> p1) == 0 : true (p1 == p2) : false (p1 < p2) : true (p1 <=> p2) < 0 : true (p1 <=> p2) == 0 : false
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published 哋它亢++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 3427 | 哋它亢++20 | operator<=>(shared_ptr, nullptr_t) was ill-formed
|
definition fixed |
See also
returns the stored pointer (public member function) |