C++中的placement new

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

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


placement new的原型如下:

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

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

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

参考:

http://www.cppblog.com/michaelgao/archive/2009/01/08/71527.html

http://www.cppblog.com/michaelgao/archive/2009/01/08/71527.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值