Namespaces
Variants

std:: owner_less

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
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)
헤더 파일에 정의됨 <memory>
(1)
template < class T >
struct owner_less ; /* 정의되지 않음 */
(C++11부터)
(C++17까지)
template < class T = void >
struct owner_less ; /* 정의되지 않음 */
(C++17부터)
template < class T >
struct owner_less < std:: shared_ptr < T >> ;
(2) (C++11부터)
template < class T >
struct owner_less < std:: weak_ptr < T >> ;
(3) (C++11부터)
template <>
struct owner_less < void > ;
(4) (C++17부터)

이 함수 객체는 std::weak_ptr std::shared_ptr 모두에 대해 값 기반이 아닌 소유자 기반의 혼합 타입 순서 지정을 제공합니다. 이 순서는 두 스마트 포인터가 모두 비어있거나 소유권을 공유하는 경우에만 동등하게 비교되며, get() 로 얻은 원시 포인터 값이 다르더라도 (예: 동일한 객체 내의 다른 하위 객체를 가리키는 경우) 마찬가지입니다.

1) 소유자 기반 혼합 타입 순서 지정은 std::shared_ptr std::weak_ptr 이외의 타입에 대해서는 제공되지 않습니다.
2) std::shared_ptr 의 소유자 기반 혼합형 순서 지정.
이는 std::shared_ptr 을 키로 사용하는 연관 컨테이너를 구축할 때 선호되는 비교 술어입니다. 즉, std:: map < std:: shared_ptr < T > , U, std :: owner_less < std:: shared_ptr < T >>> 와 같은 경우입니다.
3) 소유자 기반 혼합형 순서 지정의 std::weak_ptr .
이는 std::weak_ptr 를 키로 사용하는 연관 컨테이너를 구축할 때 선호되는 비교 술어입니다. 즉, std:: map < std:: weak_ptr < T > , U, std :: owner_less < std:: weak_ptr < T >>> 와 같은 경우입니다.
4) void 특수화는 인수로부터 매개변수 타입을 추론합니다.

기본 operator < 는 weak pointer에 대해 정의되어 있지 않으며, 동일한 객체를 가리키는 두 shared pointer를 비동등하다고 잘못 판단할 수 있습니다 (참조: std::shared_ptr::owner_before ).

목차

특수화

표준 라이브러리는 T 가 지정되지 않은 경우 std::owner_less 의 특수화를 제공합니다. 이 경우 매개변수 타입은 인수들로부터 추론됩니다(각 인수는 여전히 std::shared_ptr 또는 std::weak_ptr 이어야 합니다).

포인터 대상 타입에 관계없이 shared 및 weak 포인터의 혼합 타입 소유자 기반 순서 지정을 제공하는 함수 객체
(클래스 템플릿 특수화)
(C++17부터)


중첩 타입

중첩 타입 정의
result_type (C++17에서 사용 중단됨) (2,3) bool
first_argument_type (C++17에서 사용 중단됨) (2) std:: shared_ptr < T >
(3) std:: weak_ptr < T >
second_argument_type (C++17에서 사용 중단됨) (2) std:: shared_ptr < T >
(3) std:: weak_ptr < T >
(C++20 이전)

멤버 함수

operator()
인자를 소유자 기반 의미론을 사용하여 비교합니다
(함수)

std::owner_less:: operator()

전문화 멤버만 해당 (2)
bool operator ( ) ( const std:: shared_ptr < T > & lhs,
const std:: shared_ptr < T > & rhs ) const noexcept ;
(C++11 이후)
전문화 멤버만 해당 (3)
bool operator ( ) ( const std:: weak_ptr < T > & lhs,
const std:: weak_ptr < T > & rhs ) const noexcept ;
(C++11 이후)
두 템플릿 전문화 모두의 멤버
bool operator ( ) ( const std:: shared_ptr < T > & lhs,
const std:: weak_ptr < T > & rhs ) const noexcept ;
(C++11 이후)
bool operator ( ) ( const std:: weak_ptr < T > & lhs,
const std:: shared_ptr < T > & rhs ) const noexcept ;
(C++11 이후)

lhs rhs 를 소유자 기반 의미론을 사용하여 비교합니다. 효과적으로 lhs. owner_before ( rhs ) 를 호출합니다.

순서는 엄격한 약순서 관계입니다.

lhs rhs 는 둘 다 비어있거나 소유권을 공유하는 경우에만 동등합니다.

매개변수

lhs, rhs - 비교할 공유 소유권 포인터

반환값

소유자 기반 순서에 따라 lhs rhs 보다 작은 경우 true , 그렇지 않으면 false 를 반환합니다.

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 2873 C++11 operator ( ) noexcept로 지정되지 않음 noexcept로 지정해야 함

참고 항목

shared pointer의 소유자 기반 순서 제공
( std::shared_ptr<T> 의 public 멤버 함수)
weak pointer의 소유자 기반 순서 제공
( std::weak_ptr<T> 의 public 멤버 함수)