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. iOS 导航栏 不透明

    UINavigationBar.appearance().translucent = false UINavigationBar.appearance().barStyle = UIBarStyle. ...

  2. ios9 新关键字 __kindof 等(etc) 小结

    首先__kindof:规定参数为UITableViewCell(举例)这个类或者其子类.比如说一个NSArray<UIView *>*,如果不加__kindof,这个数组只能有UIView ...

  3. Oracle获取时间日期月份星期数

    1.日期和字符转换函数用法(to_date,to_char)select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual; ...

  4. Socket 传送文件

    1.传送文本文件 1.1服务端 package com; import java.io.BufferedWriter; import java.io.DataInputStream; import j ...

  5. IE8及以下不支持getElementByClassName的解决办法

    function getByClass(oParent, sClass){ var aEle=oParent.getElementsByTagName('*'); var aResult=[]; va ...

  6. IE6/IE7浏览器不支持display: inline-block;的解决方法

    display: inline-block;在IE6与IE7中存在bug. 1.inline元素的display属性设置为inline-block时,所有的浏览器都支持: 2.block元素的disp ...

  7. INSTALL_FAILED_NO_MATCHING_ABIS

    在运行写好的cocos的demo时候,安装出现以下问题: 后来发现是因为自己用cygwin生成的x86的.so文件跟自己的魅族3机器CPU不适配!!! 参考:http://stackoverflow. ...

  8. C#读书笔记之object类的基本方法

    The ToString() Method For example:int i = 50;string str = i.ToString(); // returns "50" He ...

  9. Delphi的StringReplace[转]

    原文:http://blog.csdn.net/genispan/article/details/4458319 function StringReplace (const S, OldPattern ...

  10. FZU 2086 餐厅点餐

     好久不写博客了……得有快一个月了……看到大神们一篇篇博文 唉……差好多……这一个月 有蓝桥杯还有校赛……校赛签到题都没签完 实力铁牌……不过蓝桥杯一等奖 五月份帝都之行还挺令人期待……清明小长假之前 ...