我想创建自己的allocator类,我想知道一些事情:
我必须定义以下类型:typedef size_t size_type;
和typedef ptrdiff_t difference_type;
。我可以使用与size_t
不同的内容吗?如果我想在使用uint32_t
代替size_t
的{{1}}的类中使用STL容器,我可以使用uint32_t
,还是必须使用size_t
}?如果我使用不同的类型,甚至签名类型,它会造成溢出或其他不愉快的事情吗?
如何将参数传递给我的分配器?我是否必须向其添加带有参数的构造函数,并在将其传递给STL容器的构造函数之前手动构造它以与其一起使用?
对于下面定义的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 )
谢谢。 :)
答案 0 :(得分:2)
这是您的分配器,因此您可以使用所需的类型。
但是,请注意,如果您希望将它与STL容器一起使用,则必须使用STL容器所期望的类型。
这里$(window).scroll(function(){
if (condition){
$(this).off('scroll');
}
});
似乎合适。
您可以为分配器提供参数,就像它是普通类一样。 构造函数,初始化方法或setter很好。 实际上,您可以为分配器提供所需的所有功能,但您必须尊重分配,解除分配签名。
您可以忽略deallocate函数的大小。我看到很多标准的allocator实现没有使用这个参数。此信息有时可能很有用,例如,如果您的分配器根据大小切换到不同的分配策略,则此参数可能有助于在deallocate方法中启用良好的deallocate实现。