# std::pmr::polymorphic_allocator<T>::allocate

< cpp‎ | memory‎ | polymorphic allocator

T* allocate( std::size_t n ); |  | (C++17 起) (C++20 前)
[[nodiscard]] T* allocate( std::size_t n ); |  | (C++20 起)

用底层的 memory_resource 分配 `n` 个 `T` 类型对象的存储。等价于 `return static_cast<T*>(resource()->allocate(n * sizeof(T), alignof(T)));` 。

### 参数

n | - | 要分配存储的对象数

### 返回值

指向被分配存储的指针。

### 异常

若 n > std::numeric_limits<std::size_t>::max() / sizeof(T) 则抛出 std::bad_array_new_length ；亦可抛出调用 resource()->allocate 所抛的任何异常。

### 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

DR | 应用于 | 出版时的行为 | 正确行为
--- | --- | --- | ---
LWG 3038 | C++17 | `allocate` 可能分配大小错误的存储 | 替而抛出 `length_error`
LWG 3237 | C++17 | `allocate` 所抛的异常与 `std::allocator::allocate` 不一致 | 使之一致

### 参阅

allocate [静态] | 用分配器分配未初始化的存储 (`std::allocator_traits<Alloc>` 的公开静态成员函数)
allocate | 分配内存 (`std::pmr::memory_resource` 的公开成员函数)