C++ placement new使用
第一种:在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使用相关推荐
- Complex Instance Placement
转自: https://specs.openstack.org/openstack/openstack-user-stories/user-stories/proposed/complex-insta ...
- Placement new
new 操作一般可以分为两个过程:1为申请内存空间 2为调用类型的构造函数进行构造 placement new 调用类型的构造函数对已存在的内存进行构造 1 #include<new.h> ...
- 二分图最大匹配(匈牙利算法) POJ 3020 Antenna Placement
题目传送门 1 /* 2 题意:*的点占据后能顺带占据四个方向的一个*,问最少要占据多少个 3 匈牙利算法:按坐标奇偶性把*分为两个集合,那么除了匹配的其中一方是顺带占据外,其他都要占据 4 */ 5 ...
- OpenStack Placement Project(Rocky to Train)
目录 文章目录 目录 前言 背景 Placement 基本概念 数据模型 指令行 Placement Web Application 的实现与分析 Placement 在 Nova 中的应用 Get ...
- OpenStack Nova Placement API 统一资源管理接口的未来
目录 目录 Placement API 为何称之为 "未来" 操作对象基本概念 数据库操作样例 Placement API 在创建虚拟机时的调度过程 Placement REST ...
- Placement new的用法及用途
什么是placement new? 所谓placement new就是在用户指定的内存位置上构建新的对象,这个构建过程不需要额外分配内存,只需要调用对象的构造函数即可. 举例来说: class foo ...
- pymysql安装_openstack stein安装placement
openstack stein install placement 安装组件: placement 注:安装服务均遵循以下步骤: mariadb创库授权 keystone创建角色并关联 keyston ...
- CNCF 沙箱项目 OCM Placement 多集群调度指南
作者: 邱见|红帽资深软件工程师,Open Cluster Management (OCM) 社区发起人,负责人 郝青|红帽高级软件工程师,Open Cluster Management (OC ...
- placement new(转)
今天看STL源码遇到一个问题: template <class _T1, class _T2> inline void _Construct(_T1* __p, const _T2& ...
- placement new 操作符
placement new操作符能够在分配内存时指定内存位置.下面的程序使用了placement new操作符和常规new操作符给对象分配内存. // placenew.cpp -- new, pla ...
最新文章
- 禁止拖放对象文本被选择
- 假期快乐!超强面试资源等你Pick,先收藏!
- bilibili深入理解计算机系统笔记(1):汇编模拟器能跑了
- Python中最重要的知识点:切片的操作,学习python一定要会的操作!
- 记一次对某企业的渗透测试实战
- leetcode 622. Design Circular Queue | 622. 设计循环队列(Ring Buffer)
- HashMap 与 ConcurrentHashMap
- 关于hexo更新到GitHub后博客内容未变问题
- ios 音高测试软件,App Store 上的“绝对音感训练!”
- Linux异步管道多线程速率测试-原始数据
- 大数据之-Hadoop之HDFS的API操作_写数据流程_上传数据原理剖析_案例---大数据之hadoop工作笔记0066
- 动态编译和静态编译及Java执行
- android串口service,Android串口操作库:EZ-SerialPort
- 京东上线“友家铺子”,社区团购进入洗牌阶段
- html模板怎样做seo,SEO如何做分享模板做外链
- [适合小白的Linu基础入门教程一
- android 圆形背景文字,android圆形图片,圆形背景文字的CircleTextImageView开源组件
- 北京市金融工作局:大数据重塑未来金融监管方式
- Chrome 浏览器如何截取整个页面
- 【Python】在字符串的头尾做文本匹配
热门文章
- 数据中心那些常见的问题
- widow下svn上传项目时的文件可执行权限问题
- 详细讲解怎样做数据仓库需求分析
- 湖北省地税应用灾备中心正式启用
- 前端开发-跨浏览器测试工具
- 人工智能 深度学习(Deep learning)开源框架
- 单片机的各种存储的含义和区别
- python创建文件对象的函数_Python学习笔记之—— File(文件) 对象常用函数
- axure 浏览器插件_7款超级实用的谷歌浏览器插件
- 如何处理计算机显示器故障,显示器突然黑屏怎么办?教你这样操作,轻松解决黑屏问题!...