std::allocator<T>:: allocate
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
(until C++20)
|
||||
|
allocator::allocate
|
||||
|
(C++23)
|
||||
|
(until C++20)
|
||||
|
(until C++20)
|
||||
|
(until C++20)
|
||||
| Non-member functions | ||||
|
(until C++20)
|
| (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 멤버 함수)
|