C++23标准中调用allocate_at_least(0)的行为疑问
C++23中
allocate_at_least(0)的行为说明 - 先明确前提:C++23之前的
allocate(0)行为是未指定的——实现可返回空指针,也可返回指向“0元素内存块”的非空指针,但调用者不能解引用该内存。 - 对于C++23新增的
allocate_at_least(0),其行为是实现定义的,但有明确约束:- 实现不得返回空指针,必须返回一个可被后续
deallocate正确释放的有效内存地址; - 返回的内存块最小容量由实现决定,主流实现通常会返回至少能容纳1个元素的内存块;
- 调用者必须对返回的内存块执行
deallocate操作,否则会引发内存泄漏。
- 实现不得返回空指针,必须返回一个可被后续
- 它不会被等价处理为
allocate(某个非零值):allocate(n)是请求“恰好容纳n个元素”的内存块,而allocate_at_least(n)是请求“至少容纳n个元素”的内存块,实现可返回更大的块以做分配优化,二者语义存在本质区别。
内容的提问来源于stack exchange,提问作者yqZhang4480
相关产品推荐
相关产品推荐

