Namespaces
Variants

std::pmr::polymorphic_allocator<T>:: construct

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)
template < class U, class ... Args >
void construct ( U * p, Args && ... args ) ;
(1) (C++17부터)
template < class T1, class T2, class ... Args1 , class ... Args2 >

void construct ( std:: pair < T1, T2 > * p,
std:: piecewise_construct_t ,
std:: tuple < Args1... > x,

std:: tuple < Args2... > y ) ;
(2) (C++17부터)
(C++20 이전까지)
template < class T1, class T2 >
void construct ( std:: pair < T1, T2 > * p ) ;
(3) (C++17부터)
(C++20까지)
template < class T1, class T2, class U, class V >
void construct ( std:: pair < T1, T2 > * p, U && x, V && y ) ;
(4) (C++17부터)
(C++20까지)
template < class T1, class T2, class U, class V >
void construct ( std:: pair < T1, T2 > * p, const std:: pair < U, V > & xy ) ;
(5) (C++17부터)
(C++20까지)
template < class T1, class T2, class U, class V >
void construct ( std:: pair < T1, T2 > * p, std:: pair < U, V > && xy ) ;
(6) (C++17부터)
(C++20까지)
template < class T1, class T2, class NonPair >
void construct ( std:: pair < T1, T2 > * p, NonPair && non_pair ) ;
(7) (C++17부터)
(C++20까지)

할당되었지만 초기화되지 않은 저장 공간에 객체를 생성합니다. 이 저장 공간은 p 가 가리키며, 제공된 생성자 인자를 사용합니다. 객체가 자체적으로 할당자를 사용하는 타입이거나 std::pair인 경우, * this 를 생성된 객체에 전달합니다.

1) 지정된 타입 U 의 객체를 uses-allocator construction 을 통해 p 가 가리키는 초기화되지 않은 메모리 위치에 생성하며, * this 를 할당자로 사용합니다. 이 오버로드는 U std::pair 의 특수화(specialization)가 아닌 경우에만 오버로드 해결에 참여합니다. (C++20 이전)
2) 먼저, T1 또는 T2 중 하나가 allocator-aware인 경우, 다음 세 가지 규칙에 따라 튜플 x y 를 수정하여 this->resource() 를 포함하도록 하여, 두 개의 새로운 튜플 xprime yprime 을 생성합니다:
2a) 만약 T1 이 allocator-aware가 아니고 ( std:: uses_allocator < T1, polymorphic_allocator > :: value == false ) 그리고 std:: is_constructible < T1, Args1... > :: value == true 이면, xprime x 으로, 수정되지 않습니다.
2b) 만약 T1 이 할당자 인식형( std:: uses_allocator < T1, polymorphic_allocator > :: value == true )이고, 해당 생성자가 할당자 태그를 받는 경우( std:: is_constructible < T1, std:: allocator_arg_t , polymorphic_allocator, Args1... > :: value == true ), 그러면 xprime std:: tuple_cat ( std:: make_tuple ( std:: allocator_arg , * this ) , std :: move ( x ) ) 입니다.
2c) 만약 T1 이 allocator-aware이고 ( std:: uses_allocator < T1, polymorphic_allocator > :: value == true ), 그리고 해당 생성자가 마지막 인자로 allocator를 받는 경우 ( std:: is_constructible < T1, Args1..., polymorphic_allocator > :: value == true ), 그러면 xprime std:: tuple_cat ( std :: move ( x ) , std:: make_tuple ( * this ) ) 입니다.
2d) 그렇지 않으면, 프로그램은 형식이 잘못되었습니다.
동일한 규칙이 T2 y yprime 으로의 대체에도 적용됩니다.
xprime yprime 이 생성된 후, 할당된 저장 공간에 p 쌍을 다음과 같이 구성합니다: :: new ( ( void * ) p ) pair < T1, T2 > ( std:: piecewise_construct , std :: move ( xprime ) , std :: move ( yprime ) ) ; .
3) 다음에 해당함 construct ( p, std:: piecewise_construct , std:: tuple <> ( ) , std:: tuple <> ( ) ) , 즉, pair의 멤버 타입이 메모리 리소스를 수용하는 경우 이를 전달합니다.
5) 다음에 해당함
6) 다음에 해당함
7) 이 오버로드는 다음의 설명 전용 함수 템플릿이 주어졌을 때에만 오버로드 해결에 참여합니다
template< class A, class B >
void /*deduce-as-pair*/( const std::pair<A, B>& );

, /*deduce-as-pair*/ ( non_pair ) 는 평가되지 않은 피연산자로 간주될 때 형식이 올바르지 않습니다. 다음 코드와 동등합니다

construct<T1, T2, T1, T2>(p, std::forward<NonPair>(non_pair));
(C++20 이전)

목차

매개변수

p - 할당되었지만 초기화되지 않은 저장 공간에 대한 포인터
args... - T 의 생성자에 전달할 생성자 인자들
x - T1 의 생성자에 전달할 생성자 인자들
y - T2 의 생성자에 전달할 생성자 인자들
xy - 두 멤버가 각각 T1 T2 의 생성자 인자인 pair
non_pair - 추가적인 생성을 위해 pair 로 변환할 non- pair 인자

반환값

(없음)

참고 사항

이 함수는 ( std::allocator_traits 를 통해) 할당자 인식 객체( std::pmr::vector 또는 할당자로 std::pmr::polymorphic_allocator 를 사용하도록 지정된 다른 std::vector )에 의해 호출됩니다.

결함 보고서

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

DR 적용 대상 게시된 동작 올바른 동작
LWG 2969 C++17 uses-allocator construction passed resource() passes * this
LWG 2975 C++17 일부 경우에 pair 생성에 첫 번째 오버로드가 잘못 사용됨 pair를 수락하지 않도록 제약됨
LWG 3525 C++17 pair 로 변환 가능한 non- pair 타입을 처리할 수 있는 오버로드가 없음 재구성 오버로드 추가됨

참고 항목

[static]
할당된 저장 공간에 객체를 생성함
(함수 템플릿)
(until C++20)
할당된 저장 공간에 객체를 생성함
( std::allocator<T> 의 public 멤버 함수)