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. VS2013中使用QT插件后每次重新编译问题

    环境 系统:win7 64位旗舰版 软件:VS2013.QT5.5.1-32位.Qt5 Visual Studio Add-in1.2.4 概述 使用QT Visual Studio插件打开pro项目 ...

  2. 第四天 内置函数2 随机码 装饰器 迭代器、生成器 递归 冒泡算法 JSON

    关于函数的return li = [11,22,33,44] def f1(arg): arg.append(55) li = f1(li) print(li) 因为li = f1(li) 实际赋值的 ...

  3. 字符串:"2016-09-21T18:57:50+08:00[Asia/Chungking]" 转Date

    public static void main(String[] args) throws Exception { Date date1 = new Date(); SimpleDateFormat ...

  4. fiddler抓包使用①

    链接:http://jingyan.baidu.com/article/3a2f7c2e0d5f2126aed61175.html   设置好代理后,有的设备需要访问"192.168.1.1 ...

  5. 永洪BI配置测试及遇到的一些问题

    1.连oracle 11g数据库遇到密码不能验证通过. 在11g中, 数据库默认密码的大小写是敏感的,jdbc在给oracle密码时, 会将其变成大写.其他个别情况也会出现变成小写的. 为统一,去除o ...

  6. 全球互联网技术大会GITC 2016 最炫酷技术盛宴

    2016年对于全球互联网产业来说,可谓是不折不扣的"创新爆发年",科技创新的更迭速度和多元化趋势都呈现出全所未见的增长态势.我们看到,云计算.大数据等在多年前萌发的技术创新正在快速 ...

  7. 4、Math对象

    1.编辑html页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...

  8. Android常用Permission

    位置相关: android.permission.WRITE_GSERVICES 允许程序修改Google服务地图(Allows an application to modify the Google ...

  9. app 一些常用的

    发短信 :sms:10086 打电话:tel:10086 1.-webkit-tap-highlight-color:rgba(255,255,255,0)可以同时屏蔽ios和android下点击元素 ...

  10. java 类型转换(摘自网络)

    java基本类型转换规则   1.基本数据类型的转换是指由系统根据转换规则自动完成,不需要程序员明确地声明不同数据类型之间的转换.     转换在编译器执行,而不是等到运行期再执行. 2.基本数据类型 ...