new   placement
你可以简单的理解为C中的realloc,就是在已有空间的基础上,重新分配一个空间,可以不破坏原来数据,也可以把数据全部用新值覆盖

一下是我搜集的一些笔记
如果你想在预分配的内存上创建对象,用缺省的new操作符是行不通的。要解决这个问题,你可以用placement   new构造。它允许你构造一个新对象到预分配的内存上:

//   buffer   是一个void指针   (void   *)

//   用方括号[]   括起来的部分是可选的

[CYourClass   *   pValue   =   ]   new(   buffer)   CYourClass[(   parameters)];

下面是一些例子:

#include   <new

class   CTest

{

public:

CTest()

{}

CTest(   int)

{}

/*   代码*/

};

int   main(int   argc,   char*   argv[])

{

//   由于这个例子的目的,我们不考虑内存对齐问题

char   strBuff[   sizeof(   CTest)   *   10   +   100];

CTest   *   pBuffer   =   (   CTest   *)strBuff;

//   缺省构造

CTest   *   pFirst   =   new(pBuffer)   CTest;

//   缺省构造

CTest   *   pSecond   =   new(pBuffer   +   1)   CTest;

//   带参数的构造;

//   不理会的指针

new(pBuffer   +   2)   CTest(   5);

//   带参数的构造

CTest   *   pFourth   =   new(   pBuffer   +   3)   CTest(   10);

//   缺省构造

CTest   *   pFifth   =   new(pBuffer   +   4)   CTest();

//   构造多个元素(缺省构造)

CTest   *   pMultipleElements   =   new(pBuffer   +   5)   CTest[   5];

return   0;

}

当你有自己的内存缓冲区或者在你实现自己的内存分配策略的时候,placement   new会很有用。事实上在STL中广泛使用了placement   new来给容器分配内存;每个容器类都有一个模版参数说明了构造/析构对象时所用的分配器(allocator)。

在使用placement   new的时候,你要记住以下几点:

加上头文件#include   <new   你可以用placement   new构造一个数组中的元素。   要析构一个用placement   new分配的对象,你应该手工调用析构函数(并不存在一个“placement   delete”)。它的语法如下:

pFirst-~CTest();

pSecond-~CTest();

//.   .   .   等等

new placement相关推荐

  1. Complex Instance Placement

    转自: https://specs.openstack.org/openstack/openstack-user-stories/user-stories/proposed/complex-insta ...

  2. Placement new

    new 操作一般可以分为两个过程:1为申请内存空间 2为调用类型的构造函数进行构造 placement new 调用类型的构造函数对已存在的内存进行构造 1 #include<new.h> ...

  3. 二分图最大匹配(匈牙利算法) POJ 3020 Antenna Placement

    题目传送门 1 /* 2 题意:*的点占据后能顺带占据四个方向的一个*,问最少要占据多少个 3 匈牙利算法:按坐标奇偶性把*分为两个集合,那么除了匹配的其中一方是顺带占据外,其他都要占据 4 */ 5 ...

  4. OpenStack Placement Project(Rocky to Train)

    目录 文章目录 目录 前言 背景 Placement 基本概念 数据模型 指令行 Placement Web Application 的实现与分析 Placement 在 Nova 中的应用 Get ...

  5. OpenStack Nova Placement API 统一资源管理接口的未来

    目录 目录 Placement API 为何称之为 "未来" 操作对象基本概念 数据库操作样例 Placement API 在创建虚拟机时的调度过程 Placement REST ...

  6. Placement new的用法及用途

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

  7. pymysql安装_openstack stein安装placement

    openstack stein install placement 安装组件: placement 注:安装服务均遵循以下步骤: mariadb创库授权 keystone创建角色并关联 keyston ...

  8. CNCF 沙箱项目 OCM Placement 多集群调度指南

    作者: ​邱见|红帽资深软件工程师,Open Cluster Management (OCM) 社区发起人,负责人​ ​郝青|红帽高级软件工程师,Open Cluster Management (OC ...

  9. placement new(转)

    今天看STL源码遇到一个问题: template <class _T1, class _T2> inline void _Construct(_T1* __p, const _T2& ...

  10. placement new 操作符

    placement new操作符能够在分配内存时指定内存位置.下面的程序使用了placement new操作符和常规new操作符给对象分配内存. // placenew.cpp -- new, pla ...

最新文章

  1. Microsoft Azure 云存储服务概念
  2. hdu4920 矩阵乘法%3
  3. u-boot分析之两阶段代码分析(三)
  4. 【AutoML】激活函数如何进行自动学习和配置
  5. 【Android UI设计与开发】3.引导界面(三)实现应用程序只启动一次引导界面
  6. GPRS联网模块:广和通FIBOCOM_G510 支持接入机智云
  7. 辽源市强化“智慧城市”建设 提高居民幸福指数
  8. 软件实施工程师是一个什么样的工作?他的具体工作内容是什么?发展前景怎样?...
  9. 打开好哈录屏或者OBS直播软件黑屏问题解决,亲测有效!
  10. 汇编语言典型例子详解_汇编语言例子
  11. img里的align属性能保证图文的混排效果以及vspace和hspace
  12. ARM嵌入式的位绑定原理
  13. 零基础转行到IT,怎么选择适合的职业?
  14. 猫哥教你写爬虫 031--爬虫基础-html
  15. 云顶之奕pbe服务器注册,云顶之弈手游pbe服
  16. 制造企业生产管理创新理念
  17. python给excel排序_Python实现EXCEL表格的排序功能示例
  18. ElasticSearch[03]SpringData集成ElasticSearch
  19. 牛客网-密码检查-小明同学最近开发了一个网站,在用户注册账户的时候,需要设置账户的密码,为了加强账户的安全性,小明对密码强度有一定要求:。。。。。
  20. 量化投资常用技能——绘图篇 2:绘制移动平均线

热门文章

  1. SpringBoot实践(二十三):MybatisPlus代码生成器使用
  2. 平衡二叉树 C语言代码实现
  3. 数据结构系列之基础篇(一)数据与结构
  4. 神经网络是模型还是算法,神经网络预测模型优点
  5. 智慧水利在线监测移动平台(Axure高保真原型)
  6. [相机原理]单反与手机是如何实现对焦的?——相位对焦的原理
  7. Android camera 相关术语(四) 之  变焦和对焦的区别VCM 闭环和开环在硬件上有什么区别
  8. Java工具类之——BigDecimal运算封装(包含金额的计算方式)
  9. waitpid函数详解+应用示例
  10. IntelliJ IDEA 执行testng 报错Cannot find class in classpath 的解决办法