C++中的定位放置new(placement new)
转载:https://www.cnblogs.com/weekbo/p/8533368.html
今天在使用new时,需要使用特定位置的一块内存,因此查了资料,发现该文章有帮助就现转载做一个备份。
一般来说,使用new申请空间时,是从系统的“堆”(heap)中分配空间。申请所得的空间的位置时根据当时的内存的实际使用情况决定的。但是,在某些特殊情况下,可能需要在程序员指定的特定内存创建对象,这就是所谓的“定位放置new”(placement new)操作。
定位放置new操作的语法形式不同于普通的new操作。例如,一般都用如下语句A* p=new A;申请空间,而定位放置new操作则使用如下语句A* p=new (ptr) A;申请空间,其中ptr就是程序员指定的内存首地址。考察如下程序。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
程序运行结果:
0024F924
A’s constructor
0024F924
num:65
~A
阅读以上程序,注意以下几点。
(1)用定位放置new操作,既可以在栈(stack)上生成对象,也可以在堆(heap)上生成对象。如本例就是在栈上生成一个对象。
(2)使用语句A* p=new (mem) A;定位生成对象时,指针p和数组名mem指向同一片存储区。所以,与其说定位放置new操作是申请空间,还不如说是利用已经请好的空间,真正的申请空间的工作是在此之前完成的。
(3)使用语句A *p=new (mem) A;定位生成对象是,会自动调用类A的构造函数,但是由于对象的空间不会自动释放(对象实际上是借用别人的空间),所以必须显示的调用类的析构函数,如本例中的p->~A()。
(4)万不得已才使用placement new,只有当你真的在意对象在内存中的特定位置时才使用它。例如,你的硬件有一个内存映像的I/O记时器设备,并且你想放置一个Clock对象在哪那个位置。
C++中的定位放置new(placement new)相关推荐
- C++中的opeartor new和placement new详解
博客:https://goodfanqie.github.io(文章优先展示地方,推荐在此阅读.) new做了哪些: 在c++中,对new的调用时,new完成的工作通常是有以下几步: 调用operat ...
- java中如何就绝对定位,Java中如何定位资源
Java中如何定位资源 本文来自:http://blog.csdn.net/ruyanhai/archive/2007/11/07/1871663.aspx ◆ 一般情况下,我们都使用相对路径来获取资 ...
- CSS中Position定位属性的使用
文章目录 CSS中定位属性的使用 position:absolute position:relative position:fixed position:sticky position:static ...
- 程序化物件放置(procedural placement)之泊松硬盘采样(poisson disk sampling)
程序化物件放置(Procedural Placement) 在开放世界游戏中, 很多小物件(物品箱子, 杂物, 草,木桶)的摆放是很耗费工作量的, 靠人工手动摆放是不现实的,为了节省工作量, 工程师探 ...
- MySQL 5.6中如何定位DDL被阻塞的问题
在上一篇文章<MySQL 5.7中如何定位DDL被阻塞的问题>中,对于DDL被阻塞问题的定位,我们主要是基于MySQL 5.7新引入的performance_schema.metadata ...
- CMRNet++:一种相机在激光雷达构建地图中的定位方案
点云PCL免费知识星球,点云论文速读. 标题:CMRNet++: Map and Camera Agnostic Monocular Visual Localization in LiDAR Maps ...
- 标准h5的定位_H5中的定位
这次给大家带来H5中的定位,H5中定位的注意事项有哪些,下面就是实战案例,一起来看一下. 一.定位流分类 1.1相对定位 1.2绝对定位 1.3固定定位 1.4静态定位 二.什么是相对定位? 相对定位 ...
- 漫谈 ClickHouse 在实时分析系统中的定位与作用
ClickHouse 是一款由俄罗斯Yandex公司开源的OLAP数据库,拥有着卓越的性能表现,在官方公布的基准测试中,ClickHouse的平均响应速度是Vertica的2.63倍.InfiniDB ...
- 基于激光雷达的里程计及3D点云地图中的定位方法
本文转载自公众号@点云PCL,基于激光雷达的里程计及3D点云地图中的定位方法 :https://mp.weixin.qq.com/s/laA1YAPBCpqlzdGi0yb2cQ 论文:LOL: Li ...
最新文章
- Flatten Nested Arrays(展平嵌套数组)
- 在VSO8中使用QT
- Google Apps – Framework, Phonesky, GmsCore w/ AOSP Build.
- Ionic Mac 环境配置
- java中修改密码_java怎样修改用户名密码?
- redis 安装配置
- Python内置函数(49)——isinstance
- 双栏模板图片标题无法居中_没想到吧,只用一张图片,你就可以做一份PPT!
- SUMIFS函数多条件求和的9个实例【转载】
- js中点击按钮时变色,松开后恢复原来的颜色
- 冲突域和广播域,中继器、集线器、网桥、交换机、路由器和网关
- 适合学龄前孩子看的动画片 小蜜蜂(蜂来乐)值得推荐
- c语言程序设计入门教程视频教学
- Unity-射线检测
- 字符串中单词分别逆序
- 数字故宫(360全景+纪录片+数据库+公开课)
- Ubuntu 蓝屏拯救
- xd生成html,7款Adobe XD必备插件
- 【问题解决】关于 C++ 连接 Redis 集群报错 MOVED
- 【硅谷银行】硅谷银行倒闭事件
热门文章
- bmon:一个强大的网络带宽监视和调试工具
- 初识Mysql(一)
- 读书笔记2013第3本:《无价》
- 机器学习自主解决安全威胁离我们还有多远?
- sharepoint 2013基于AD的Form表单登录(三)——选择用户时,屏蔽掉AD。
- DreamWeaver连接Tomcat用以编辑和测试JSP
- 【struts2】Struts2的运行流程
- 远程连接server问题
- Android应用开发—FragmentManager如何管理fragments
- mysql5.6 memcached_MySQL 5.6 安装配置InnoDB memcached Plugin