gpt4 book ai didi

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

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

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

最佳答案

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

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

如果分配器的用户知道每个内存块有多大(这种情况很常见),那么可以使用自定义分配器来节省此开销,并告诉 deallocate 函数关于 block 的大小。

关于c++ - 为什么 std::allocator<>::deallocate() 有一个未使用的 size_type 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22113947/

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