先看看 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<Type> _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
本文深入探讨了C++标准库中std::vector的allocator模板参数的作用与使用方法,包括如何利用placement new手动调用构造函数及释放内存的过程。
504

被折叠的 条评论
为什么被折叠?



