关于自定义分配器的问题

Questions about custom allocators

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

对于下面定义的函数 deallocate,我可以忽略要解除分配的项数吗?

void deallocate( pointer p, size_type nNum )
{
   (void) nNum;
   delete[] p;
}

..

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

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

谢谢。 :)

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

  2. 您可以向您的分配器提供参数,就好像它是一个普通的 class。 构造函数、初始化方法或设置器都可以。 事实上,您可以为您的分配器提供所有您想要的功能,但您必须遵守分配、解除分配签名。

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