std::allocator::allocate

pointer allocate( size_type n, std::allocator<void>::const_pointer hint = 0 );
(1) (C++17 前)
T* allocate( std::size_t n, const void * hint);
(1) (C++17 起)
(弃用)
(2)
T* allocate( std::size_t n );
(C++17 起)
(C++20 前)
[[nodiscard]] T* allocate( std::size_t n );
(C++20 起)

以调用 ::operator new(std::size_t) 分配 n * sizeof(T) 字节的未初始化存储,但何时及如何调用此函数是未指定的。指针 hint 可用于提供引用的局部性:若实现支持,则 allocator 会试图分配尽可能接近 hint 的新内存块。

目录

参数

n - 要分配存储的对象数
hint - 指向临近内存位置的指针

返回值

指向适当对齐并足以保有 T 类型的 n 个对象数组的内存块首字节的指针。

异常

若分配失败则抛出 std::bad_alloc

注意

遣词“未指定何时及如何”令标准库容器可以组合或优化掉堆分配,即使这种优化对直接调用 ::operator new 被禁止。例如,这为 libc++ 所实现( [1][2]

参阅

[静态]
用分配器分配未初始化的存储
(std::allocator_traits 的公开静态成员函数)

版本历史

  • (当前 | 先前 2017年11月13日 (一) 16:25Fruderica讨论 | 贡献 . . (1,660字节) (+111). . (P0600R1 nodiscard) (撤销)
  • 当前 | 先前 2017年5月29日 (一) 01:49Fruderica讨论 | 贡献. . (1,549字节) (-361). . (撤销)
  • 当前 | 先前 2013年7月2日 (二) 09:00P12bot讨论 | 贡献 . . (1,910字节) (-61). . (Use {{lc}}. Update links. Various fixes.) (撤销)
  • 当前 | 先前 2012年11月2日 (五) 17:11P12bot讨论 | 贡献 . . (1,971字节) (+297). . (r2.7.3) (机器人添加:de, en, es, fr, it, ja, pt, ru) (撤销)
  • 当前 | 先前 2012年10月27日 (六) 03:24P12讨论 | 贡献 . . (1,674字节) (0). . (1个修订: Translate from the English version) (撤销)
  • 当前 | 先前 2012年10月26日 (五) 06:00TranslationBot讨论 | 贡献. . (1,674字节) (-46). . (Translated from the English version using Google Translate) (撤销)
  • 当前 | 先前 2012年10月25日 (四) 14:08P12讨论 | 贡献 . . (1,720字节) (0). . (1个修订: Translate from the English version) (撤销)
  • 当前 | 先前) 2012年10月25日 (四) 12:00TranslationBot讨论 | 贡献. . (1,720字节) (+1,720). . (Translated from the English version using Google Translate)