什么是分配器
这是一个内存管理的抽象概念。
在C编程中,您基本上使用函数malloc()
和free()
来分配内存块,而无需知道如何分配块。在C++中,函数是operator new()
和operator delete()
。
std::allocator
是一个模板,取一个类型参数,它是要分配的对象的类型。 std::allocator
的实例化在内部使用operator new()
和operator delete()
,但std::allocator<T>
具有关于什么是T
的信息意味着它知道如何构造和销毁对象。
的std::allocator<T>
四个基本功能是:
-
allocate(size_type n)
用途
operator new()
为n * sizeof (T)
字节分配空间。请注意,分配的对象都不构成任何对象;不同于new T()
,这两个对象分配一个空间T
对象和调用无参数构造函数,allocate(size_type n)
只分配空间给n
T
对象。您需要使用construct()
来显式构造每一个。 -
deallocate(pointer p, size_type n)
用途
operator delete()
以释放先前调用allocate()
返回的内存。请注意,deallocate()
只能释放空间。您必须在每个n
T
对象上明确地调用destroy()
,否则您可能会泄漏内存。 -
construct(pointer p, const T& val)
呼吁位于
p
的T
对象T
拷贝构造函数。 -
destroy(pointer p)
调用位于
p
的T
对象的析构函数T
。
非常感谢! – 2012-04-18 15:17:34
+1,阅读了一些关于'std :: allocator'的文章和SO答案,但这是我第一次理解它。谢谢 :) – 2016-01-08 16:20:04
它是执行标准库容器类的内存管理的类。
但是,如果您想提供自己的内存管理,您可以这样做,std::allocator
提供了默认的内存管理。
它执行'默认'内存管理。 – Nick 2012-04-18 14:34:23
是的,但它如何用于矢量实现? – 2012-04-18 14:37:59
@RondogiannisAristophanes:依赖于实现,作为容器的用户,不需要知道。 – 2012-04-18 14:39:22
['std :: allocator'](http://en.cppreference.com/w/cpp/memory/allocator) – Praetorian 2012-04-18 14:33:04