代码之家  ›  专栏  ›  技术社区  ›  Jonathan Graehl

C++分配器< x>::允许释放(null,1)?

  •  6
  • Jonathan Graehl  · 技术社区  · 14 年前

    两个 free(NULL) ::operator delete(NULL) 是允许的。分配器概念(例如std::allocator)是否也允许 deallocate(NULL,1) 还是需要你自己保护?

    1 回复  |  直到 10 年前
        1
  •  9
  •   GManNickG    14 年前

    您需要添加自己的支票。

    根据_§20.4.__1.1/8, deallocate 要求:

    p应为从allocate()获得的指针值。n应等于通过的值 allocate调用的第一个参数,返回p。

    allocate 当无法提供存储时引发异常(_§20.4._1.1/7)。换言之, 分配 从不返回0,因此 解除分配 不应该得到0。传递0将导致未定义的行为。