Namespaces
Variants

std::allocator<T>::allocate

cppreference.net에서
 
 
메모리 관리 라이브러리
할당자
메모리 자원
초기화되지 않은 저장소 (C++20까지)*)
가비지 컬렉터 지원 (C++23까지)
 
 
pointer allocate( size_type n, const void* hint = 0 );
(1) (C++17까지)
T* allocate( std::size_t n, const void* hint );
(C++17부터)
(C++20에서 제거됨)
T* allocate( std::size_t n );
(2) (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가 불완전 타입인 경우 이 함수를 사용하는 것은 잘못된 형식(ill-formed)입니다.

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

(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 멤버 함수)