使用std::allocator
时,deallocate
函数需要pointer
参数和size_type
参数(std::allocator<>::deallocate(std::allocator<>::pointer p, std::allocator<>::size_type)
。但是,不使用size_type ,也不是可选的。那么它为什么会出现?它真的让我感到困惑,因为它应该是可选的,甚至不存在,因为它没有在函数中使用。
修改:MSVC实施分配器deallocate
void deallocate(pointer _Ptr, size_type)
{ // deallocate object at _Ptr, ignore size
::operator delete(_Ptr);
}
答案 0 :(得分:8)
即使标准分配器不使用要释放的内存块的大小,其他分配器也可能。因此,参数必须是这样的,所有使用分配器的STL代码都可以以相同的方式使用不同的分配器。
标准分配器不需要size参数,因为它会记住每个已分配块的大小。但是,这会给每次分配增加相当多的开销。
如果分配器的用户知道每个内存块的大小(通常是这种情况),那么可以使用自定义分配器来节省这种开销,并告诉deallocate
函数大小而是阻止了。