gpt4 book ai didi

c++ - 关于自定义分配器的问题

转载 作者:太空狗 更新时间:2023-10-29 21:40:35 25 4
gpt4 key购买 nike

我想创建自己的分配器类,但我想知道一些事情:

  • 我必须定义以下类型:typedef size_t size_type;typedef ptrdiff_t difference_type;。我可以使用不同于 size_t 的东西吗?如果我想在使用 uint32_t 而不是 size_t 的类中使用 STL 容器,我可以改用 uint32_t 吗,或者它必须是 size_t 吗?如果我使用不同的类型,甚至签名类型,它会产生溢出或其他不愉快的事情吗?

  • 如何将参数传递给我的分配器?我是否必须添加一个带有参数的构造函数,并在将其传递给 STL 容器的构造函数以与它一起使用之前手动构造它?

对于下面定义的函数 deallocate,我可以忽略要释放的项目数吗?

void deallocate( pointer p, size_type nNum )
{
(void) nNum;
delete[] p;
}
  • 什么是“重新绑定(bind)”?

..

template< class U >
struct rebind
{
typedef Allocator< U > other;
};

template< class U >
Allocator( const Allocator< U > & oAlloc )

谢谢。 :)

最佳答案

  1. 这是您的分配器,因此您可以使用您想要的类型。但是,请注意,如果您希望将它与 STL 容器一起使用,则必须使用 STL 容器期望的类型。size_t 在这里似乎很合适。

  2. 您可以像普通类一样为您的分配器提供参数。构造函数、初始化方法或 setter 都可以。事实上,您可以为您的分配器提供所有您想要的功能,但您必须尊重分配、解除分配签名。

  3. 您可以忽略解除分配函数的大小。我看到很多没有使用这个参数的标准分配器实现。此信息有时可能很有用,例如,如果您的分配器根据大小切换到不同的分配策略,则此参数可能有助于 deallocate 方法打开良好的 deallocate 实现。

关于c++ - 关于自定义分配器的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30780866/

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