zoukankan      html  css  js  c++  java
  • Placement new

    new 操作一般可以分为两个过程:1为申请内存空间 2为调用类型的构造函数进行构造

    placement new 调用类型的构造函数对已存在的内存进行构造

     1 #include<new.h>
     2 
     3 class T
     4 {
     5 public:
     6     T(){};
     7     T(int val)
     8     {
     9         this->a=val;
    10     }
    11     ~T()
    12     {
    13     }
    14     int a;
    15 };
    16 
    17 template <class T1,class T2>
    18 inline void construct(T1 *p,const T2 &value)
    19 {
    20     new (p) T1(value);
    21 }
    22 
    23 template <class T>
    24 inline void destory(T* pointer)
    25 {
    26     pointer->~T();
    27 }
    28 
    29 
    30 #include "MEMORY.h"
    31 int main()
    32 {
    33     T *p=new T();
    34     int val=2;
    35     construct(p,val);
    36     destory(p);
    37     delete p;
    38 }

    使用new操作符分配内存需要在堆中查找足够大的剩余空间,显然这个操作速度是很慢的,而且有可能出现无法分配内存的异常(空间不够)。 
    placement new 就可以解决这个问题。我们构造对象都是在一个预先准备好了的内存缓冲区中进行,不需要查找内存,内存分配的时间是常数;而且不会出现在程序运行中途出现内 存不足的异常。所以,placement new非常适合那些对时间要求比较高,长时间运行不希望被打断的应用程序。

    但也很容易造成内存泄漏的情况!所以要注意在不需要内存缓冲区时,要即时释放内存空间!

    别让别人来告诉你,你成不了才,如果你有梦想的话,就要去捍卫它---当幸福来敲门
  • 相关阅读:
    动态设置ImageView的大小
    URI和URL、URN的区别
    关于Android中的异步任务
    Android下如何理解onMeasure,onLayout的过程
    Android如何获取同包名应用的图标及名称
    Android4.0 监听 android 手机情景模式(有声、静音、振动)
    Android中裁剪一张图片
    Json解析国家气象局天气API
    Android中AnimationDrawable的使用
    POJ
  • 原文地址:https://www.cnblogs.com/yihua/p/3117583.html
Copyright © 2011-2022 走看看