允许C++分配器<X> :: deallocate(NULL,1)?

Jon*_*ehl 7 c++ free null memory-management allocator

这两个free(NULL)::operator delete(NULL)是允许的.分配器概念(例如std :: allocator是否允许deallocate(NULL,1),或者是否需要自己保护它?

GMa*_*ckG 10

您需要添加自己的支票.

根据§20.4.1.1/ 8,deallocate要求:

p应该是从allocate()获得的指针值.n应该将作为第一个参数传递的值等于返回p的allocate的调用.

allocate无法提供存储时抛出异常(§20.4.1.1/ 7).换句话说,allocate永远不会返回0,因此永远不会返回deallocate0.传递0会导致未定义的行为.