有关自定义分配器的问题
Questions about custom allocators
我想创建自己的分配器类,我想知道一些事情:
-
我必须定义以下类型:
typedef size_t size_type;
和typedef ptrdiff_t difference_type;
。我可以使用与size_t
不同的东西吗?如果我想在使用uint32_t
表示长度和位置而不是size_t
的类中使用 STL 容器,我可以改用uint32_t
,还是必须size_t
?如果我使用其他类型,甚至是签名类型,它会产生溢出或其他不愉快的事情吗? -
如何将参数传递给我的分配器?我是否必须添加一个带有参数的构造函数,并在将其传递给 STL 容器的构造函数以使用它之前手动构造它?
对于下面定义的函数 delease,我可以忽略要释放的项目数吗?
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 )
谢谢。:)
-
这是您的分配器,因此您可以使用所需的类型。但是,请注意,如果您希望将其与 STL 容器一起使用,则必须使用 STL 容器期望的类型。
size_t
在这里似乎很合适。 -
您可以向分配器提供参数,就像它是普通类一样。构造函数、初始化方法或资源库都可以。事实上,你可以向分配器提供你想要的所有功能,但你必须尊重分配、释放签名。
-
您可以忽略释放函数的大小。我看到很多标准分配器实现没有使用此参数。此信息有时可能很有用,例如,如果您的分配器根据大小切换到不同的分配策略,则此参数可能有助于释放方法以打开良好的释放实现。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 在C++为矢量编写自定义虚拟分配器时遇到问题
- 关于Hinnant堆栈分配器的问题
- 提升快速池分配器在函数指针方面存在问题
- 通过池分配器中的内存地址访问可用列表节点时出现问题
- 带有嵌入式竞技场的堆栈分配器的问题
- 启用-std=c++0x时,自定义分配器的编译问题
- 为什么在c++ 11中交换标准库容器会有问题(涉及分配器)
- 内存管理 - C++ 中的自定义分配器有什么问题?
- 有关自定义分配器的问题