C++中的placement new


在写服务器程序的时候,经常会用到内存池,很多是在堆(heap)上预分配一大块内存,用空闲链表的方式来实现内存的分配与回收。

在业务应用的时候,如果想用这预分配的内存来创建对象,就不能用通常的new了,而需要用到placement new构造,它可以构造对象到给出的内存上。

placement new的原型如下:

void *operator new( size_t, void *p ) throw()  { return p; }

大概的使用流程类似下面的步骤:

  1. class A  
  2. {  
  3.     ……  
  4. };  
  5. void* mem = pMemPoll->alloc(); //从内存池预分配的内存   
  6. A* a = new(mem)A;  
  7. ……  
  8. a->~A(); //注意,对象回收时,需要显式调用析构函数  

相关内容