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