c++动态数组(二)之allocator类

2023-11-19

new在灵活性上面一些局限性,以方便它将内存分配和对象构造组合在了一起,delete将内存释放和对象析构组合在一起。

当分配一大块内存时,我们通常计划在这块内存上面按需构造对象。在这种情况下,我们希望内存分配和对象构造分离。这意味着我们可以分配大块内存,但只有在真正需要时才真正执行对象创建操作。

new表达式分配并初始化n个对象,但是我们可能不需要n个对象,这样我们就可能建立了一些永远也用不到的对象。而且,对于那些确实要使用的对象,我们也在初始化之后立即赋予了它们新值。每个使用到的元素都被赋值了两次:第一次是默认初始化时,第二次是赋值时。

更重要的是,那些没有默认构造函数的类就不能动态分数组了。

allocator类

它帮助我们将内存分配和对象构造分离开来。
为了定义一个allocator对象,我们必须知名这个allocator可以分配的对象类型。

    allocator<string> alloc;
    auto const p = alloc.allocate(10);//分配10个未初始化的string

allocator分配未构造的内存

allocator<string> alloc;
auto const p = alloc.allocate(10);//分配10个未初始化的string
auto q = p;//q指向最后构造的元素之后的位置

alloc.construct(q);
cout << *q << endl;//*q是空字符串
q++;
alloc.construct(q,10,'c');//*q是cccccccccc
cout << *q << endl;
q++;
alloc.construct(q, "hi");//*q是hi
cout << *q << endl;

当我们用完对象时,必须对每个构造的元素调用destroy来销毁他们。destroy接收一个指针

while(q!=p){
    alloc.destroy(--q);//释放我们真正构造的string
}

q指向最后构造的元素之后的位置。

一旦元素被销毁之后,我们就可以重新使用这部分内存来保存其他string。释放内存通过调用deallocate来完成。

alloc.deallocate(p,n);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++动态数组(二)之allocator类 的相关文章

随机推荐

  • 软件设计(十四)-UML建模(上)

    软件设计 十三 原码 反码 补码 移码https blog csdn net ke1ying article details 129115844 spm 1001 2014 3001 5501 UML建模包含 用例图 类图与对象图 顺序图
  • css根据某个角旋转,设置旋转中心点

    前言 css3里面是有动画的属性的 里面有个旋转 那么旋转怎么来根据元素的不同点来旋转呢 这里分享下方法 实现源码 1 旋转的代码 transform rotate 7deg 旋转的兼容性写法 ms transform rotate 7de
  • 【Google测试之道】第三章 测试工程师

  • 手残-网络重置后网络适配器全感叹号且各种方法联网失效的问题解决

    前因 回家过年连接无线网的时候 刚开始连不上网络 莫名其秒的就点开了网络设置 然后重置了网络 真是秀逗了 导致痛苦的开始 重启之后 发现电脑的wifi图标没了 更糟糕的是 打开设备管理器发现网络适配器全是感叹号 驱动没了 即使在这里右键更新
  • 《信号与系统》解读 第1章 信号与系统概述-3:基本的1阶时域信号--单位阶跃信号、单位斜变信号、单位冲击信号

    目录 连续信号 1 单位阶跃信号 2 单位斜变信号 自然界衰变规律之一 3 单位冲击信号 离散信号 4 单位阶跃序列 5 单位采样 连续信号 1 单位阶跃信号 1 定义 t gt 0时 信号的幅度恒等于1 t lt 0时 信号的幅度恒等于0
  • Ubuntu 16.04系统中GCC 9.1编译器安装方法及C++17标准测试示例

    严正声明 本文系作者davidhopper原创 未经许可 不得转载 2019年8月2日更新 本文方法适用于GCC 9 1 0 只需将原文中的GCC 7 3 0替换为GCC 9 1 0即可 为什么要更新到GCC 9 1 0 因为该版本可支持C
  • web3无法在浏览器远程调用miner.start()

    原文 https bitshuo com topic 58841835fd9ca2790427eb67 web3无法在浏览器远程调用miner start 首先我在启动私链时已经调用了miner模块 代码如下 geth identity s
  • PyCharm2019.1.1安装(Ubuntu16.04)

    PyCharm2019 1 1安装 Ubuntu16 04 我们已经在Ubuntu里安装了Python 可以在终端使用Python 也可以用文本编辑器编写代码后然后用Python执行代码 但这些都不是很方便 也不是很智能和不够友好 需要有多
  • 利用Python每日将股票数据进行爬取、并做了一波处理分析

    1 先展示 时间 价格 涨跌幅 2 说明 因为在上班的时候 直接打开交易软件的话 太明显 会让别人看到我在炒股 所以 自己写一个 可以随时查看自己持仓的股票涨跌情况 3 代码 import tushare as ts import time
  • 【问题解决】利用Eclipse,在hadoop上传文件到hdfs没有内容

    本文适用于一些在网上找了半天答案都没解决问题的人群 因为我也是在按网上说道弄了一天 最后才解决的 如果你是刚遇到问题 还没有深入 建议你查看这篇文章 http f dataguru cn hadoop 208802 1 1 html 将问题
  • 创业的真谛是顺势而为,借船过海!

    追寻成功的路上 顺势最易 借势稍难 造势境界最高 创业者 或者创业团队 积极争取优惠政策 打造自身适宜环境 努力营造外在氛围 最大化有效使用身边各种资源 懂得聚合放大 顺势是为了 为 顺势而为 最终是为了顺势大为 一 顺势而为 无论商场战场
  • Python opencv学习-13 直方图反向投影(用于图像分割)

    代码和图片大量参考https blog csdn net tengfei461807914 article details 77075567 自己跑了下验证了下 个人理解 直方图反向投影用来做图像分割 或者说知道了一个目标的图片的一部分 去
  • 利用Redis bitmap签到功能

    1 简介 BitMap 存储的是连续的二进制数字 0 和 1 通过 bitmap 只需要一个 bit 位来表示某个元素对应的值或者状态 key 就是对应元素本身 我们知道 8 个 bit 可以组成一个 Byte 所以bitmap 本身会极大
  • 为什么程序员都喜欢安静?

    大家回顾一下上学期间 你在上晚自习想完成今天老师布置的作业 但是你的班级却非常的吵闹 跟置身在菜市场一样 你能专心完成作业吗 不受周围吵闹环境的影响吗 相信大部分的人都难以静下心来认真完成作业 有时候好不容易想到一个思路 结果旁边的人拍你一
  • Windows系统常用命令

    Windows常用命令 1 echo 用法 输出一个字符到终端 当加上 gt 后就可输出到文本文件 例如 echo 1 在终端显示一个1 echo 20 gt gt 1 txt 在当前目录下的1 txt文件后面追加一行数据值20 如果没有1
  • AT24C02芯片使用介绍

    AT24C02简介 AT24C02是一个2K位串行CMOS E2PROM 内部含有256个8位字节 有一个16字节页写缓冲器 该器件通过IIC总线接口进行操作 有专门的写保护功能 应用于AT24C02制造过程的先进CMOS技术实质上减少了器
  • 咬牙切齿的按钮

    先看效果 再看代码 查看更多 import url https fonts googleapis com css2 family Roboto wght 500 display swap root sz 9vmin on 4CAF50 of
  • ftp服务器性能对比,ftp服务器软件 性能对比

    ftp服务器软件 性能对比 内容精选 换一换 Java性能分析是鲲鹏性能分析工具的子工具 本章节以openEuler离线环境安装工具 登录 创建Guardian和分析任务 卸载工具为例 指导您快速上手Java性能优分析 由于root用户拥有
  • 机器学习毕设题目有哪些_毕设开源了,126个star,39个fork

    毕设题目 我是去年毕业的 软件工程专业 学校给的毕设题目是实现一个电影院订票系统 如图 嗯 题目一看很简单 其实就是实现一个web版的影票在线订票系统罢了 因此当天接到毕设后的我就大刀阔斧的准备开干了 技术方案选择 先说个大前提 我们学校评
  • c++动态数组(二)之allocator类

    new在灵活性上面一些局限性 以方便它将内存分配和对象构造组合在了一起 delete将内存释放和对象析构组合在一起 当分配一大块内存时 我们通常计划在这块内存上面按需构造对象 在这种情况下 我们希望内存分配和对象构造分离 这意味着我们可以分