Placement new的用法及用途
Posted linyx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Placement new的用法及用途相关的知识,希望对你有一定的参考价值。
什么是placement new?
所谓placement new就是在用户指定的内存位置上构建新的对象,这个构建过程不需要额外分配内存,只需要调用对象的构造函数即可。
举例来说:
1 class foo{}; 2 foo* pfoo = new foo;
pfoo指向的对象的地址你是不能决定的,因为new已经为你做了这些工作。第一步分配内存,第二步调用类的构造函数。
而placement new是怎么做的呢,说白了就是把原本new做的两步工作分开来。第一步你自己分配内存,第二步你调用类的构造函数在自己分配的内存上构建新的对象。
placement new的好处:
- 在已分配好的内存上进行对象的构建,构建速度快。
- 已分配好的内存可以反复利用,有效的避免内存碎片问题。
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的用法及用途的主要内容,如果未能解决你的问题,请参考以下文章
Item 52:写了placement new就要写placement delete