什么是placement new?

所谓placement new就是在用户指定的内存位置上构建新的对象,这个构建过程不需要额外分配内存,只需要调用对象的构造函数即可。
举例来说:

1 class foo{};
2 foo* pfoo = new foo;

pfoo指向的对象的地址你是不能决定的,因为new已经为你做了这些工作。第一步分配内存,第二步调用类的构造函数。

而placement new是怎么做的呢,说白了就是把原本new做的两步工作分开来。第一步你自己分配内存,第二步你调用类的构造函数在自己分配的内存上构建新的对象。

placement new的好处:

  1. 在已分配好的内存上进行对象的构建,构建速度快。
  2. 已分配好的内存可以反复利用,有效的避免内存碎片问题。
 1 // 分配内存
 2 char* buff = new char[ sizeof(Foo) * N ];
 3 memset( buff, 0, sizeof(Foo)*N );
 4
 5 // 构建对象
 6 Foo* pfoo = new (buff)Foo;
 7
 8 // 使用对象
 9 pfoo->print();
10 ...
11
12 // 析构对象,显式的调用类的析构函数。
13 pfoo->~Foo();
14
15 // 销毁内存
16 delete [] buff;

placement new还可以解决的一个问题是建立带参数的构造函数对象数组。

转自:http://www.cppblog.com/kongque/archive/2010/02/20/108093.html

转载于:https://www.cnblogs.com/linyx/p/7116188.html

Placement new的用法及用途【转】相关推荐

  1. Placement new的用法及用途

    什么是placement new? 所谓placement new就是在用户指定的内存位置上构建新的对象,这个构建过程不需要额外分配内存,只需要调用对象的构造函数即可. 举例来说: class foo ...

  2. placement new的用法

    placement new是重载operator new的一个标准.全局的版本,它不能被自定义的版本代替(不像普通的operator new和operator delete能够被替换成用户自定义的版本 ...

  3. placement new的标准用法及用途

    什么是placement new? 所谓placement new就是在用户指定的内存位置上构建新的对象,这个构建过程不需要额外分配内存,只需要调用对象的构造函数即可. 举例来说: class foo ...

  4. 函数指针的用法以及用途详解

    在C++中,指针是一个核心的部分,常规的指针用法作者已经在另外一篇文章中有过详细介绍,这篇文章主要是针对函数指针进行讨论. 首先我们先来认识一下函数指针的概念,我们平时在写函数的时候,调用函数时总是以 ...

  5. dirname,basename的用法与用途

    #dirname介绍 当对文件使用dirname时,返回文件的上级目录,输出是否是绝对路径取决于输入的文件名是绝对路径 如果对目录使用,则返回上级目录 basename命令与dirname相反,读取文 ...

  6. 侯捷C++视频笔记——C++面向对象高级编程(下)

    C++面向对象高级编程(下) 01.简介 学习目标: 1.探讨上篇没有探讨过的问题 2.继续深入了解面向对象,包括虚指针,虚表,虚函数,以及多态 02.转换函数与explicit 1.转换函数 转换函 ...

  7. 交易系统开发技能及面试题之c++基础特性

    文章目录 概要: Q1 空类实例化对象的sizeof Q2 指针操作优先级 *p++ Q3 c-string作为map key时会有什么问题 Q4 虚函数表的Sizeof大小 Q5 new/new[] ...

  8. C++ 的placement new和placement delete

    参考: placement new和placement delete_hujing_Liu-CSDN博客 <effctive C++>p256 通常的C++程序中,new和delete表达 ...

  9. placement new和placement delete

    在第五版的<C++ primer>中,定位new(placement new)放在最后一章:特殊工具与技术中介绍,讲的比较简单.而在<effctive C++>中则用了一章的篇 ...

最新文章

  1. 给定数组 求和等于固定值 算法_[见题拆题] 大厂面试算法真题解析 - 第一期开张...
  2. 世界对一名颓废者的惩罚——SDOI2019游记
  3. nutzwk oracle,NutzWk插件使用
  4. 智能建筑进入新的十年
  5. Java数据类型以及变量的定义
  6. Run service in specified proxyPort via jettyrun
  7. 计算机系统结构——概述
  8. Linux单独编译设备树,迅为IMX6Q开发板-非设备树内核-单独编译内核驱动
  9. selenium获取接口 HAR
  10. yum 安装、 rpm安装、 源码编译安装
  11. JavaCV的摄像头实战之六:保存为mp4文件(有声音)
  12. React antd的table表格之嵌套表格
  13. 【算法练习】POJ - 3683 Priest John's Busiest Day (2-SAT)
  14. 英飞凌-AURIX-TC3XX 片上总线通信架构
  15. JavaScript 网页禁用屏蔽常用操作
  16. Windows7 任务栏功能的开发
  17. 2021-06-15记录端午假期学习微信小程序 计算器
  18. ASP.NET是什么?与.NET有什么关系
  19. button按钮样式
  20. Linux下Qt程序运行时找不到so的解决办法

热门文章

  1. python进阶之装饰器之5把装饰器作用到类和静态方法上
  2. Spring Boot与Docker部署
  3. android Fragments (Android官方文档中文版)
  4. 手把手教你写个ORM(一)
  5. 数据结构上机实践第三周项目1
  6. sift算法c语言实现
  7. c++工程模式+配置文件+动态调用类
  8. mysql seconds_behind_master_MySQL同步状态双Yes的假象及seconds_behind_master的含义
  9. mysql存储过程 begin_MySQL存储过程的BEGIN和END
  10. 加密 数字_数字卢布不会具有BTC这样的加密资产的优势