allcator是一个模板类

定义在memory头文件中,将内存分配与对象构造分开,分配的内存是原始的、未构造的

一、how to use

因其实一个类,则使用allcator时需要首先声明一个类对象

allocator<type> alloc;  //type指明allocator可以分配的对象类型,alloc为对象

用对象分配内存

auto p=alloc.allocate(n);
// 分配n个未初始化的 type

一些用法

alloc.deallocate(p,n)
// 释放从type*指针p中地址开始的内存,这块地址保存了n个类型为type的对象
// p必须是一个先前由allocate返回的指针
// 在调用此函数之前,用户必须对每个在这块内存中创建的对象调用destroy alloc.construct(p,args)
//在p指向的内存中构造一个值为args的对象 alloc.destroy(p)
// 对p指向的对象执行析构函数

通俗的来讲,allocator是一个向系统申请一段内存空间的工具,申请的内存空间就相当于一片空地

为了利用这片空地我们需要construct一些东西,construct后,如果不要这些东西了,就要destroy掉这些对象,之后如果不要这块地了,就上交给国家deallocate

二、拷贝与填充未初始化内存

用allocator申请内存空间,不一定能够用完,对于剩下的内存空间有如下的使用方法

uninitialized_copy(b,e,b2);
// 从迭代器b和e指出的输入范围中拷贝到b2指定的位置,返回指向最后一个元素之后的指针 uninitialized_copy_n(b,n,b2);
// 从迭代器b指出的位置开始拷贝n个元素到b2指定位置,返回指向最后一个元素之后的指针 
uninitialized_fill(b,e,t);
// 在迭代器b到e指定的范围中创建对象值均为t的拷贝 uninitialized_fill(b,n,t);
// 类似

  

allocator 类的更多相关文章

  1. C++ Primer : 第十二章 : 动态内存之allocator类

    标准库allocator类定义在头文件 <memory>中.它帮助我们将内存分配和构造分离开来,它分配的内存是原始的.未构造的. 类似vector,allocator也是一个模板类,我们在 ...

  2. C++--allocator类的使用

    C++为我们提供了安全的内存空间申请方式与释放方式,可是new与delete表达式却是把空间的分配回收与对象的构建销毁紧紧的关联在一起.实际上,作为与C语言兼容的语言,C++也为我们提供了更加底层的内 ...

  3. 【C++11新特性】 - 空间配置allocator类

    原文链接: http://blog.csdn.net/Xiejingfa/article/details/50955295 今天我们来讲讲C++的allocator类. C++提供了new和delet ...

  4. allocator类

    一.动态数组 [new的局限性] new将内存分配和对象构造组合在一起,同样delete将对象析构和内存释放组合在一起 我们分配单个对象时,通常希望将内存分配和对象初始化组合在一起(我们知道对象应有什 ...

  5. [C++] 空间配置器——allocator类

    1.new和delete有一些灵活性上的局限:new把内存分配和对象构造组合在了一起:delete将对象析构和内存释放组合在了一起.   2.当分配一大块内存时,我们通常计划在这块内存上按需构造对象, ...

  6. 动态数组、allocator 类

    12.2 动态数组 12.2.1 new 和数组 1.分配一个动态数组即是在分配一个new对象时在类型名之后加一对方括号,用来存放数组大小,该数可以是任意表达式.也可以是0,只需是整形.无需是常量.数 ...

  7. C++ allocator类学习理解

    前言 在学习STL中containers会发现C++ STL里定义了很多的容器(containers),每一个容器的第二个模板参数都是allocator类型,而且默认参数都是allocator.但是a ...

  8. [转载] 彻底学习STL中的Allocator

    原文: http://cissco.iteye.com/blog/379093 帮助我们理解allocator的原理 Allocator是C++语言标准库中最神秘的部分之一.它们很少被显式使用,标准也 ...

  9. STL源码分析读书笔记--第二章--空间配置器(allocator)

    声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...

随机推荐

  1. 向量空间(Vector Spaces)

    向量空间(Vector Spaces) 向量空间又称线性空间,是线性代数的中心内容和基本概念之一.在解析几何里引入向量的概念后,是许多问题的处理变得更为简洁和清晰,在此基础上的进一步抽象化,形成了与域 ...

  2. JSP脚本元素、指令元素、动作元素

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  3. 快捷高效的cmd命令

    经常在网上逛一些博客看一些技术文章,但是每每看过之后又忘记保存,或者东存一下,西存一下,到需要的时候回过头来,往往都找不到了.所以开通这个博客,把看到的好东西都记录下来,以便回头查看,也能与大家分享分 ...

  4. openresty 前端开发轻量级MVC框架封装二(渲染篇)

    这一章主要介绍怎么使用模板,进行后端渲染,主要用到了lua-resty-template这个库,直接下载下来,放到lualib里面就行了,推荐第三方库,已经框架都放到lualib目录里面,lua目录放 ...

  5. Javaweb 第12天 JSP、EL技术

    第12天 JSP.EL技术 今日任务: JSP技术入门和常用指令 JSP的内置对象&标签介绍 EL表达式&EL的内置对象 课堂笔记 1.JSP技术入门和常用指令 1.1.JSP的由来. ...

  6. js--局部变量

    今天公司一个实习小妹子问我两段JS代码的区别: <script type="text/javascript"> var a = "Hello"; f ...

  7. file_zilla 通过key连接远程服务器

    file_zilla 通过key连接 01 在putty中 ifconfig -a 查看当前网站ip02 文件-站点管理器--新建站点---主机ip 端口2203协议 SFTP 就是SSH协议04登录 ...

  8. Android中GridView、ListView 的 getChildAt() 方法返回null 问题

    开发的Android app用到了GridView或者ListView,通常使用getChildAt(int position)方法获取当前点击或者选中的View(即position对应的View). ...

  9. deque (STL)

    //双端队列 //deque的成员函数 c.assign(beg, end); //将[beg, end]区间中的数据赋值给c c.assign(n, elem); //将n个elem的拷贝赋值给c ...

  10. pthread_create线程创建的过程剖析(转)

    概述 在Linux环境下,pthread库提供的pthread_create()API函数,用于创建一个线程.线程创建失败时,它可能会返回ENOMEM或EAGAIN.这篇文章主要讨论线程创建过程中碰到 ...