std::allocator<T>:: allocate_at_least
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
(until C++20)
|
||||
|
allocator::allocate_at_least
(C++23)
|
||||
|
(until C++20)
|
||||
|
(until C++20)
|
||||
|
(until C++20)
|
||||
| Non-member functions | ||||
|
(until C++20)
|
|
constexpr
std::
allocation_result
<
T
*
,
std::
size_t
>
allocate_at_least ( std:: size_t n ) ; |
(C++23부터) | |
초기화되지 않은 저장 공간을
count
*
sizeof
(
T
)
바이트만큼 할당합니다. 여기서
count
는
n
이상의 지정되지 않은 정수 값이며,
::
operator new
(추가적으로
std::align_val_t
인자가 있을 수 있음)를 호출하여 수행됩니다. 그러나 이 함수가 언제, 어떻게 호출되는지는 지정되지 않습니다.
그런 다음, 이 함수는 저장소에 T [ count ] 타입의 배열을 생성하고 해당 배열의 수명을 시작하지만, 그 요소들의 수명은 시작하지 않습니다.
이 함수를 상수 표현식에서 사용하려면, 할당된 저장 공간이 동일한 표현식의 평가 내에서 해제되어야 합니다.
이 함수의 사용은
T
가
incomplete type
인 경우 잘못된 형식입니다.
목차 |
매개변수
| n | - | 저장 공간을 할당할 객체 수의 하한 |
반환값
std::
allocation_result
<
T
*
>
{
p, count
}
, 여기서
p
는 아직 생성되지 않은
T
타입의 객체
count
개로 이루어진 배열의 첫 번째 요소를 가리킵니다.
예외
다음 경우에 std::bad_array_new_length 를 발생시킵니다: std:: numeric_limits < std:: size_t > :: max ( ) / sizeof ( T ) < n 이거나, 할당이 실패할 경우 std::bad_alloc 를 발생시킵니다.
참고 사항
allocate_at_least
는 주로 연속 컨테이너, 예를 들어
std::vector
와
std::basic_string
에 제공되며, 가능한 경우 용량이 실제 할당된 크기와 일치하도록 하여 재할당을 줄이기 위한 목적을 가집니다.
"언제 그리고 어떻게 지정되지 않음"이라는 표현은 표준 라이브러리 컨테이너들이 수행하는 힙 할당을 결합하거나 최적화하여 제거할 수 있게 합니다. 비록 이러한 최적화들이 :: operator new 에 대한 직접 호출에서는 허용되지 않더라도 말입니다. 예를 들어, 이는 libc++에 의해 구현됩니다 ( [1] 및 [2] ).
allocate_at_least
호출 후 요소 생성 전에,
T
*
의 포인터 연산은 할당된 배열 내에서 잘 정의되지만, 요소에 접근할 경우 동작은 정의되지 않습니다.
| Feature-test 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_allocate_at_least
|
202302L
|
(C++23) |
allocate_at_least
등
|
예제
#include <memory> #include <print> int main() { const std::size_t count{69}; std::allocator<int> alloc; std::allocation_result res{alloc.allocate_at_least(count)}; std::print("count: {}\n" "res.ptr: {}\n" "res.count: {}\n", count, res.ptr, res.count); /* construct, use, then destroy elements */ alloc.deallocate(res.ptr, res.count); }
가능한 출력:
count: 69 res.ptr: 0x555a486a0960 res.count: 96
참고 항목
|
(C++23)
|
allocate_at_least
에 의해 할당된 저장 공간의 주소와 실제 크기를 기록합니다
(클래스 템플릿) |
|
[static]
(C++23)
|
할당자를 통해 요청된 크기 이상의 저장 공간을 할당합니다
(
std::allocator_traits<Alloc>
의
public static 멤버 함수)
|