简单介绍下STL中的分配器allocators。
allocators我们一般不会直接接触到,甚至可能并不清楚它的存在,简单的来说,它就是一个幕后工作者,我的印象中它的作用主要在于为容器分配一定的空间。 如果我们使用容器的时候并未留意到它,则主要是由于每一个容器都已经指定其缺省的空间分配器。如:
template <class T, class Alloc = allocator<int> > Class vector {….};
由于Alloc已经指定,所以我们通常使用容器的时候直接这样使用,如: vector<int> iv;
即使如此我们也有必要知道其实它还有一个缺省的默认分配器。像很多库中还有很多优秀的其他的分配器,如:alloc等。(G2.9 STL的默认分配器,G4.9版以改为allocator)。如果你需要使用它们作为你的分配器则需要指定出来,如: vecotr<int, alloc> iv;
名为allocator的分配器,效率其实并不是很高。只是把C++的::operator new 和 :: operator delete做了一层薄薄的包装而已。
我们也可以试着直接调用allocator:
); //申请3个int变量的空间(对象名加小括号表示临时对象) allocator<);
// ); // 分配 512 bytes. // alloc::deallocate(p, ); // 这是之前G2.9的版本, G4.9版本中alloc改名为__pool_alloc 并置于namespace __gnu_cxx中,使用如下:
);
);
如上,由于释放内存的时候需要记录之前申请内存的int的数量3。这样会很麻烦,代码多了可能就会忘掉之前申请的大小。所以并不推荐直接使用allocator。