- new有个特殊用法,如下:
Base *p = (Base*)operator new (sizeof(Base)); new (p) Base;
其中第二行的意思是将p中的地址中的连续空间当做是Base类,然后调用Base的构造函数。这个new的用法称之为placement new。
placement new的用途是可以将对于对象的内存分配和实际变量值的构建过程分离开。 - 在STL的allocator和memory库中,很明显的使用了placement new的内存分配策略。对于container来说,如果要大量的构建对象的话,如果一个一个的去分配内存和构建的话,时间开销相对会很大。所以他们里面的实现都利用了Allocator提供的机制来提前分配内存,然后在分配的内存上面构建对象(也就是调用对象的构造函数)。
根据STL的规定,allocator一定要有如下的接口:
- static void* allocate(size_t __n, void * = 0);
- static void deallocate(void* __p, size_t /* __n */)
- void construct(pointer __p, const _Tp& __val);
- void destroy(pointer __p);
- static void* allocate(size_t __n, void * = 0);
C++ Allocator学习笔记
最新推荐文章于 2022-05-07 19:00:16 发布