std::allocator<T>::allocate
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 멤버 함수)
|