某些容器A
具有Alloc
表示分配器类型的模板参数(也是模板)。A
指定Alloc
类型A::Node
。
template <template <T> Alloc>
class A {
struct Node {
};
Alloc<Node> allocator_; // the allocator object
};
请原谅我上面可能存在错误的C ++代码。
因此,allocator_.allocate(1)
将分配sizeof(A::Node)
字节。但是在操作过程中,容器A
需要为A :: Node类型以外的某个对象存储一个内存,比如说一个临时字符串(of char
)。
从技术角度来看,我可以以一种肮脏的方式使用现有的分配器:
size_t string_len = 500;
// how much objects spanned in memory is enough to fit our string?
size_t equal_size = (string_len / sizeof(Node)) + 1;
auto mem = allocator_.allocate(equal_size);
char *p = (char*)mem; // reinterpret cast
// ... use p to store the string ... memcpy(p, str_src, str_len); //
// Now p is not needed, so return memory to allocator:
allocator_.deallocate(mem, equal_size);
考虑到我不需要多于1个分配器,并且希望将所有内存管理都放在该分配器上,是否有一种更简单的方法?
所有这些都来自这些需求:
std::allocator
rebind
正是出于这种目的而具有成员类型:
std::allocator<Node> alloc;
std::allocator<Node>::rebind<char>::other char_alloc;
char * mem = char_alloc.allocate(string_len);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句