在C++源码剖析这本书的第二章空间配置器中,有这么一段代码
template <class T1, class T2> inline void _construct(T1 * p, const T2& value) { new(p) T1(value); }
代码解读:
通过查询了解到这个操作叫做placement new,就是在指针p所指向的内存空间创建一个T1类型的对象,但是对象的内容是从T2类型的对象转换过来的,就是在已有空间的基础上重新调整分配的空间,类似于realloc函数。
这个操作就是把已有的空间当成一个缓冲区来使用,这样子就减少了分配空间所耗费的时间,因为直接用new操作符分配内存的话,在堆中查找足够大的剩余空间速度是比较慢的。