为什么std :: allocator<> :: deallocate()有一个未使用的size_type参数?

时间:2014-03-01 11:45:23

标签: c++ parameters allocator

使用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);
    }

1 个答案:

答案 0 :(得分:8)

即使标准分配器不使用要释放的内存块的大小,其他分配器也可能。因此,参数必须是这样的,所有使用分配器的STL代码都可以以相同的方式使用不同的分配器。

标准分配器不需要size参数,因为它会记住每个已分配块的大小。但是,这会给每次分配增加相当多的开销。

如果分配器的用户知道每个内存块的大小(通常是这种情况),那么可以使用自定义分配器来节省这种开销,并告诉deallocate函数大小而是阻止了。