zoukankan      html  css  js  c++  java
  • Placement new的用法及用途【转】

    什么是placement new?

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

    1 class foo{};
    2 foo* pfoo = new foo;

    pfoo指向的对象的地址你是不能决定的,因为new已经为你做了这些工作。第一步分配内存,第二步调用类的构造函数。

    而placement new是怎么做的呢,说白了就是把原本new做的两步工作分开来。第一步你自己分配内存,第二步你调用类的构造函数在自己分配的内存上构建新的对象。


    placement new的好处:

    1. 在已分配好的内存上进行对象的构建,构建速度快。
    2. 已分配好的内存可以反复利用,有效的避免内存碎片问题。
     1 // 分配内存
     2 char* buff = new char[ sizeof(Foo) * N ];
     3 memset( buff, 0, sizeof(Foo)*N );
     4 
     5 // 构建对象
     6 Foo* pfoo = new (buff)Foo;
     7 
     8 // 使用对象
     9 pfoo->print();
    10 ...
    11 
    12 // 析构对象,显式的调用类的析构函数。
    13 pfoo->~Foo();
    14 
    15 // 销毁内存
    16 delete [] buff;

    placement new还可以解决的一个问题是建立带参数的构造函数对象数组。

    转自:http://www.cppblog.com/kongque/archive/2010/02/20/108093.html

  • 相关阅读:
    方法重载
    构造方法:(特殊方法,用来创建对象 没写就会默认有构造方法)
    java:第十二章
    java:第九章
    java:第十四章
    java:第十五章
    java:第十一章
    I/O小结
    java:第八章
    java:第六章
  • 原文地址:https://www.cnblogs.com/linyx/p/7116188.html
Copyright © 2011-2022 走看看