博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
placement new用法
阅读量:7099 次
发布时间:2019-06-28

本文共 631 字,大约阅读时间需要 2 分钟。

看侯捷老师的stl 源码剖析时,在allocator设计一个简单的空间适配器那一节看到这么个奇怪的语法:

 
template
inline void _construct(T1 *p,const T2& value)
{
new(p) T1(value);
}

 

给出的注释是place new,invoke ctor of T1

第一次知道有这么个语法,网上查了一下,这句话的意思是,在p指向的位置新建一个对象,内容为T(value),也就是说place new把普通new分成了两步:分配空间和填充。我们知道使用new操作符分配内存需要在堆中查找足够大的剩余空间,这个操作速度是很慢的,而且有可能出现无法分配内存的异常(空间不够)。placement new就可以解决这个问题。我们构造对象都是在一个预先准备好了的内存缓冲区中进行,不需要查找内存,内存分配的时间是常数;而且不会出现在程序运行中途出现内存不足的异常。所以,placement new非常适合那些对时间要求比较高,长时间运行不希望被打断的应用程序。

placement new主要适用于:在对时间要求非常高的应用程序中,因为这些程序分配的时间是确定的;长时间运行而不被打断的程序;以及执行一个垃圾收集器(garbage collector)。

使用方法介绍:

转载于:https://www.cnblogs.com/obama/archive/2013/04/28/3048572.html

你可能感兴趣的文章
dedecms 系统的 data/rssmap.html不存在!更新了也没有。。。
查看>>
博文共赏:Node.js静态文件服务器实战
查看>>
CS安装卸载测试总结(转)
查看>>
深入理解JavaScript系列(18):面向对象编程之ECMAScript实现(推荐)
查看>>
iphone开发之轻松搞定原生socket 编程,阻塞与非阻塞,收发自如
查看>>
ColdFusion select option 用法,看看哪种适合你的
查看>>
Amazium - 响应式 CSS 框架 - 开源中国
查看>>
使用Vitamio打造自己的Android万能播放器(5)——在线播放(播放优酷视频)
查看>>
iis7 发布mvc 遇到的HTTP错误 403.14-Forbidden Web 服务器被配置为不列出此目录的内容...
查看>>
PHP通过Thrift操作Hbase
查看>>
Sql Server导入Access数据库报不可识别的数据库格式 Microsoft JET Database Engine
查看>>
存储设备形成的层次结构
查看>>
http://knockoutjs.com/工作杂记
查看>>
Http协议中的Header与Body
查看>>
窗口大小改变绑定resize事件
查看>>
python数据结构之二叉树遍历的实现
查看>>
进出口流程 & 报关单据
查看>>
各主流浏览器内核介绍
查看>>
[LeetCode] Copy List with Random Pointe
查看>>
我使用中的Linux命令和快捷键(For Ubuntu)
查看>>