【C++】placement new的简单介绍

在C++中,当我们调用new来从heap中分配一块内存的时候,其实做了两步操作:

1. 调用::operator new来分配一块内存
2. 调用新分配对象的构造函数

当我们需要多次重新构造某些对象,或是某些分配出来的对象可能并不会使用的时候,将分配内存和构造对象分离开来,会带来性能上的提高,这在实现一个memory pool或是garbage collector的时候会很有用。

我们可以使用placement new来在已有的内存上创建对象,从而减少分配内存的操作。placement new的用法和普通的new不同,它在括号里多了个参数,像这个样子:

// pre-allocated buffer
void *buf  = ::operator new(sizeof(string)); 
// placement new
string *p = new(buf) string("hi");    

括号里的参数代表一个指针,这个指针指向一块预先分配的内存空间。placement new将在这块内存空间上构造对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值