Namespaces
Variants

std::allocator<T>:: allocate

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)
(1)
pointer allocate ( size_type n, const void * hint = 0 ) ;
(C++17까지)
T * allocate ( std:: size_t n, const void * hint ) ;
(C++17부터)
(사용 중단됨)
(C++20에서 제거됨)
(2)
T * allocate ( std:: size_t n ) ;
(C++17부터)
(C++20까지)
constexpr T * allocate ( std:: size_t n ) ;
(C++20부터)

n * sizeof ( T ) 바이트의 초기화되지 않은 저장 공간을 :: operator new ( std:: size_t ) 또는 :: operator new ( std:: size_t , std:: align_val_t ) (C++17부터) 를 호출하여 할당하지만, 이 함수가 언제 어떻게 호출되는지는 명시되지 않습니다. hint 포인터는 참조 지역성을 제공하기 위해 사용될 수 있습니다: 구현체에서 지원하는 경우, 할당자는 새로운 메모리 블록을 hint 에 최대한 가깝게 할당하려고 시도합니다.

그러면 이 함수는 저장 공간에 T[n] 타입의 배열을 생성하고 해당 배열의 수명을 시작하지만, 그 요소들의 수명은 시작하지 않습니다.

이 함수의 사용은 T incomplete type 인 경우 잘못된 형식입니다.

이 함수를 상수 표현식에서 사용하려면, 할당된 저장 공간이 동일한 표현식의 평가 내에서 해제되어야 합니다.

(since C++20)

목차

매개변수

n - 저장 공간을 할당할 객체의 수
hint - 인접 메모리 위치에 대한 포인터

반환값

아직 생성되지 않은 n 개의 T 타입 객체 배열에서 첫 번째 요소를 가리키는 포인터.

예외

다음의 경우 std::bad_array_new_length 를 throw함: std:: numeric_limits < std:: size_t > :: max ( ) / sizeof ( T ) < n .

(C++11부터)

할당이 실패할 경우 std::bad_alloc 을(를) 발생시킵니다.

참고 사항

"언제 그리고 어떻게 지정되지 않음"이라는 표현은 표준 라이브러리 컨테이너들이 수행하는 힙 할당을 결합하거나 최적화하여 제거할 수 있게 합니다. 비록 이러한 최적화들이 ::operator new 에 대한 직접 호출에서는 허용되지 않더라도 말입니다. 예를 들어, 이는 libc++에 의해 구현되었습니다 ( [1] [2] ).

allocate() 를 호출한 후 요소들의 생성 전에, 할당된 배열 내에서 T* 의 포인터 연산은 잘 정의되어 있지만, 요소들이 접근되는 경우의 동작은 정의되지 않습니다.

결함 보고서

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

DR 적용 대상 게시된 동작 올바른 동작
LWG 578 C++98 hint 가 반드시 0 이거나
이전에 allocate() 에서 반환된 포인터이며
아직 deallocate() 에 전달되지 않은 상태여야 함
요구사항 아님
LWG 3190 C++11 allocate() 가 잘못된 크기의 저장 공간을 할당할 수 있었음 대신 std::bad_array_new_length 를 throw함

참고 항목

[static]
할당자를 사용하여 초기화되지 않은 저장 공간을 할당합니다
( std::allocator_traits<Alloc> 의 public static 멤버 함수)