神秘的 Allocator

先看看 std::vector 的声明
template < class Type,  class Allocator = allocator<Type> >
class vector

 这个 allocator 一般我们很少用到,这个 allocatior 完成了分配内存的工作,对于小内存,它使用了线程池来优化效率。比较具体的介绍可以参考 http://www.stlchina.org/twiki/bin/view.pl/Main/STLWhatAllocator 。

需要注意的是,如果你的 Type 是一个类,那么这个 allocatior 实际上只分配了足够的内存,而并没有调用这个类的构造函数,如果你的类需要调用构造函数,可以使用 new 的比较少见的一种用法(placement new):

std::allocator _alloc; 
Type *p=_alloc.allocator(1); // 分配一个空间 1 是要构造的 Type 的数量
p=new (p) Type( ); // 在这个空间上调用构造函数,注意第一个 () 不能少

在指定的空间创建你的类(调用构造函数)。最后释放空间

_alloc.deallocator( p, 1 ); // 释放空间

如果想搞明白 new 的这些奇怪的用法,可以参考 http://www.javajsp.net/JavaLibrary/C/200701/JavaLibrary_6963.html

你可能感兴趣的:(vector,class,优化,工作,C++)