第一种:在c++中在使用new时编译器会申请内存,然后调用类的构造函数来初始化对象,调用delete会销毁对象同时释放该对象占用的内存,并且我们可以重载new操作符。

第二种:placement new,在使用时需要我们传入一个指针*p,此时会在该指针指向的内存空间构造该对象,该指针指向的地址可以使堆空间,栈空间,也可以是静态存储区。

我们可以提前申请好一个内存空间,然后使用placement new来构造对象,那么就会在我们指定的内存空间中构造对象,这样做的好处是不用频繁申请和释放空间,造成系统大量内存碎片.

#include <iostream>
using  namespace std;class Test {
public:Test(std::string b){ this->a = b; }~Test(){ std::cout << "~Test" << std::endl; }std::string get() { return  a;}std::string a;
};int main() {//1.stack,为Test{}类申请提前内存char stackBuf[1024] = {0};Test *pt = NULL;pt = new(stackBuf)Test("Stack memory.");std::cout<< "pt::a = " << pt->get()  << std::endl;pt->~Test();//2.heap,为Test{}类申请提前内存char *p = (char *)malloc(sizeof(Test) + sizeof(int));pt = new(p)Test("Heap memory.");std::cout<< "pt::a = " << pt->get()  << std::endl;pt->~Test();free(p);//这里不能用delete释放,因为没有申请内存,只是调用构造函数.//delete pt;
}

C++ placement new使用相关推荐

  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. 禁止拖放对象文本被选择
  2. 假期快乐!超强面试资源等你Pick,先收藏!
  3. bilibili深入理解计算机系统笔记(1):汇编模拟器能跑了
  4. Python中最重要的知识点:切片的操作,学习python一定要会的操作!
  5. 记一次对某企业的渗透测试实战
  6. leetcode 622. Design Circular Queue | 622. 设计循环队列(Ring Buffer)
  7. HashMap 与 ConcurrentHashMap
  8. 关于hexo更新到GitHub后博客内容未变问题
  9. ios 音高测试软件,‎App Store 上的“绝对音感训练!”
  10. Linux异步管道多线程速率测试-原始数据
  11. 大数据之-Hadoop之HDFS的API操作_写数据流程_上传数据原理剖析_案例---大数据之hadoop工作笔记0066
  12. 动态编译和静态编译及Java执行
  13. android串口service,Android串口操作库:EZ-SerialPort
  14. 京东上线“友家铺子”,社区团购进入洗牌阶段
  15. html模板怎样做seo,SEO如何做分享模板做外链
  16. [适合小白的Linu基础入门教程一
  17. android 圆形背景文字,android圆形图片,圆形背景文字的CircleTextImageView开源组件
  18. 北京市金融工作局:大数据重塑未来金融监管方式
  19. Chrome 浏览器如何截取整个页面
  20. 【Python】在字符串的头尾做文本匹配

热门文章

  1. 数据中心那些常见的问题
  2. widow下svn上传项目时的文件可执行权限问题
  3. 详细讲解怎样做数据仓库需求分析
  4. 湖北省地税应用灾备中心正式启用
  5. 前端开发-跨浏览器测试工具
  6. 人工智能 深度学习(Deep learning)开源框架
  7. 单片机的各种存储的含义和区别
  8. python创建文件对象的函数_Python学习笔记之—— File(文件) 对象常用函数
  9. axure 浏览器插件_7款超级实用的谷歌浏览器插件
  10. 如何处理计算机显示器故障,显示器突然黑屏怎么办?教你这样操作,轻松解决黑屏问题!...