码迷,mamicode.com
首页 > 其他好文 > 详细

Placement new的用法及用途【转】

时间:2017-07-04 14:53:09      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:div   析构函数   用户   foo   位置   blank   lan   pre   函数对象   

什么是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

 

Placement new的用法及用途【转】

标签:div   析构函数   用户   foo   位置   blank   lan   pre   函数对象   

原文地址:http://www.cnblogs.com/linyx/p/7116188.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!