首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是allocator<T>

什么是allocator<T>
EN

Stack Overflow用户
提问于 2012-04-18 22:30:24
回答 2查看 348关注 0票数 4

我正在尝试实现一个向量,并且我已经读到最好的实现使用分配器类(内存头文件)。我不知道这是什么,网站的cplusplus.com对我一点帮助都没有。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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>的四个基本功能是:

  1. 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析构函数

票数 7
EN

Stack Overflow用户

发布于 2012-04-18 22:33:53

它是一个执行标准库容器类的内存管理的类。

但是,如果您想要提供自己的内存管理,您可以这样做,std::allocator提供了默认的内存管理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10211586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档