gpt4 book ai didi

c++ - 如何重新绑定(bind)自定义分配器?

转载 作者:行者123 更新时间:2023-12-02 07:26:19 27 4
gpt4 key购买 nike

我需要一个用于 STL vector 和映射的自定义分配器,以便它在预分配的内存块中“分配”内存。我遇到了这段代码,它几乎存在于每个分配器中。

    Allocator(const Allocator<U, growSize> &other)
{
if (!std::is_same<T, U>::value)
rebindAllocator = new std::allocator<T>();
}

有人可以解释一下它的作用以及为什么我们需要实现这个接口(interface)吗?非常感谢。

Full source code

最佳答案

将分配器视为引用某些底层非类型化存储的类型化接口(interface)。许多分配器可能引用相同的存储。

分配器需要允许重新绑定(bind),以便 T 的分配器可以转换为引用相同存储的 U 的分配器。分配器必须是可复制构造的,并且分配器的拷贝必须引用相同的存储。 See cppreference.

这个分配器实现也是存储。它源自内存池。因此,它需要一种方法让复制的分配器从原始存储而不是它自己的存储中进行分配和释放。这是copyAllocator。由于尚不清楚的原因,它仅在 Windows 上执行此操作。

类似地,反弹分配器需要访问相同的存储。这个分配器似乎违反了这一点并使用了 std::allocator 。这意味着它不适合许多 STL 用例。 std::map 和其他基于节点的容器将使用反弹分配器进行分配,这意味着它们不会使用内存池。

关于c++ - 如何重新绑定(bind)自定义分配器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59621070/

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