我正在尝试实现一个向量,并且我已经读到最好的实现使用分配器类(内存头文件)。我不知道这是什么,网站的cplusplus.com对我一点帮助都没有。
发布于 2012-04-18 22:44:26
它是内存管理的抽象。
在C编程中,您实际上使用函数malloc()和free()来分配内存块,而不需要知道这些内存块是如何分配的。在C++中,函数是operator new()和operator delete()。
std::allocator是一个接受一个类型参数的模板,该参数是要分配的对象的类型。std::allocator的实例化在内部使用operator new()和operator delete(),但是std::allocator<T>拥有关于T是什么的信息,这意味着它知道如何构造和销毁T对象。
std::allocator<T>的四个基本功能是:
allocate(size_type n)使用operator new()为n * sizeof (T)字节分配空间。请注意,分配的n T对象都不是构造的;与new T()不同的是,它既为一个T对象分配空间,又调用无参数构造函数,而allocate(size_type n)只为n T对象分配空间。您需要使用construct()显式构造每个one.
deallocate(pointer p, size_type n)使用operator delete()释放上一个对allocate()的调用返回的内存。请注意,deallocate()只释放空间。您必须显式地对每个n T对象调用destroy(),否则可能会泄漏n
调用位于p.
destroy(pointer p)的T对象的T复制构造函数对位于p.的T对象调用T析构函数
发布于 2012-04-18 22:33:53
它是一个执行标准库容器类的内存管理的类。
但是,如果您想要提供自己的内存管理,您可以这样做,std::allocator提供了默认的内存管理。
https://stackoverflow.com/questions/10211586
复制相似问题