gpt4 book ai didi

C++ 默认分配器 - 如果大小不等于传递给分配调用的大小,会发生什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:15 25 4
gpt4 key购买 nike

20.6.9:

void deallocate(pointer p, size_type n);
  • 要求:p 应是从 allocate() 获得的指针值。 n 应等于作为第一个参数传递给返回 p 的分配调用的值。
  • 效果:释放 p 引用的存储。
  • 备注:使用了::operator delete(void*) (18.6.1),但未指定何时调用此函数。

如果 n 不等于作为第一个参数传递给返回 p 的分配调用的值,会发生什么?不解除分配?抛出 std::bad_alloc? ...

编辑:我所说的“应该发生什么”的实际意思是:在自定义实现中抛出或断言可以吗?

最佳答案

和 C++ 标准一样,当没有明确说明时,违反要求会导致未定义的行为。 Shall 表示在任何时候都必须,这是一项要求,而不是 C++ 标准中的一个选项。

例如这里是MSDN says :

The pointer _Ptr must have been returned earlier by a call to allocate for an allocator object that compares equal to *this, allocating an array object of the same size and type.

这意味着大小必须精确匹配,否则您会遇到未定义的行为。

关于C++ 默认分配器 - 如果大小不等于传递给分配调用的大小,会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6772260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com