c++中的placement new操作符学习

参考文献:http://blog.csdn.net/zhangxinrun/article/details/5940019

new操作符:

例子如下:int * pint=new int(23);它先在堆上分配内存空间;接着初始化这个内存空间;最后返回此指针。

对于此操作是可以重载的,记住是只能在类中被重载,得到了一个重载版本为placement new (旧版本是operator new),原型如下void *operator new( size_t, void *p ) throw()  { return p; },应用:MyClass * pClass=new(p) int(23);形式上和原版是不同的,它的功能只是实现已有内存的指针p上进行构造一个int的对象。

比较:

显然此处少去了内存空间分配过程,节约了内存搜索的过程了;至于内存的申请之类的可以有其他函数来完成,比如就用以前的new,而只是在它空间上进行重新指定,而不需要销毁,再次重新分配。

 

注意:

此处内存可以在堆中,当然也可以在栈中;此处是new,对于new[] ,delete ,delete[]都类似的处理。

时间: 2024-08-06 00:33:35

c++中的placement new操作符学习的相关文章

placement new 操作符

placement new操作符能够在分配内存时指定内存位置.下面的程序使用了placement new操作符和常规new操作符给对象分配内存. // placenew.cpp -- new, placement new, no delete #include <iostream> #include <string> #include <new> using namespace std; const int BUF = 512; class JustTesting {

SQL Server中的锁的简单学习

原文:SQL Server中的锁的简单学习 简介 在SQL Server中,每一个查询都会找到最短路径实现自己的目标.如果数据库只接受一个连接一次只执行一个查询.那么查询当然是要多快好省的完成工作.但对于大多数数据库来说是需要同时处理多个查询的.这些查询并不会像绅士那样排队等待执行,而是会找最短的路径执行.因此,就像十字路口需要一个红绿灯那样,SQL Server也需要一个红绿灯来告诉查询:什么时候走,什么时候不可以走.这个红绿灯就是锁. 图1.查询可不会像绅士们那样按照次序进行排队 为什么需要

Java中的自增操作符与中间缓存变量机制

转自:http://blog.csdn.net/maggiedorami/article/details/7986098 我们来看这样一段程序: public static void main(String[] args){ int i, sum1, sum2; i=0; sum1 = (i++)+(i++); System.out.println("sum1="+sum1); i = 0; sum2 = (++i)+(++i); System.out.println("su

java学习中,匿名函数、构造方法、构造代码块、构造方法中调用构造方法(java 学习中的小记录)

java学习中,匿名函数.构造方法.构造代码块.构造方法中调用构造方法(java 学习中的小记录) 作者:王可利(Star·星星) 匿名函数 匿名对象:没有名字的对象 匿名对象使用的注意点: 1.一般不会用匿名对象给属性赋值,无法获取属性值,每次new 都是一个新的对象. 2.匿名对象永远都不可能是一个对象. 如:person new().name = "星星":是不行的 匿名对象的好处:书写简单. 匿名对象使用的场景: 1.如果一个对象调用一个方法一次的时候,就可以用匿名对象来调用.

EF中扩展出Between操作符 (修订版)

随手记录一下,这是针对原文错误的修改. 原文:EF中扩展出Between操作符 直接使用是错误的,修改后的扩展方法: /// <summary> /// 扩展 Between 操作符 /// 使用 var query = db.People.Between(person => person.Age, 18, 21); /// </summary> /// <typeparam name="TSource"></typeparam>

contiki-main.c 中的process系列函数学习笔记 &lt;contiki学习笔记之六&gt;

说明:本文依然依赖于 contiki/platform/native/contiki-main.c 文件. ------------------------------------------------------------------------------------------------------------------------------------- 根据上一个笔记里面添加的printf()语句的打印信息提示,hello world 打印是在执行了 1 autostart_

spark中flatMap函数用法--spark学习(基础)

spark中flatMap函数用法--spark学习(基础) 在spark中map函数和flatMap函数是两个比较常用的函数.其中 map:对集合中每个元素进行操作. flatMap:对集合中每个元素进行操作然后再扁平化. 理解扁平化可以举个简单例子 val arr=sc.parallelize(Array(("A",1),("B",2),("C",3))) arr.flatmap(x=>(x._1+x._2)).foreach(prin

(原)关于MEPG-2中的TS流数据格式学习

关于MEPG-2中的TS流数据格式学习 Author:lihaiping1603 原创:http://www.cnblogs.com/lihaiping/p/8572997.html 本文主要记录了,结合网上两篇博客 1) https://www.maizhiying.me/posts/2017/07/12/demux-ts.html 2) https://my.oschina.net/u/727148/blog/666824 ,mepg-2(13818)文档以及使用ffmpeg将mp4文件转码

关于linux操作系统中进程相关问题的学习笔记

关于linux操作系统中进程相关问题的学习笔记 1.摘要   进程的经典定义是一个执行中程序的实例.系统中的每个程序都运行在某个进程的上下文中(contest)中.上下文是由程序运行正确运行所需的状态组成的.这个状态包括存放在内存中的程序的代码和数据,它的栈.通用目的寄存器的内容.程序计数器.环境变量以及打开文件描述符合的集合.在本次学习笔记中,我是以linux为例,学习了以下三个方面的知识:操作系统如何组织进程.进程状态如何转换以及进程是如何调度的.在最后我还谈了下自己对操作系统进程模型的一些