allocator简单实现

来源:互联网 发布:云计算应用场景举例 编辑:程序博客网 时间:2024/06/08 15:59

allocator是c++标准库中用于管理内存的一个类。主要包括以下类方法:


代码如下(来源于《STL源码剖析》):

#ifndef _JJALLOC_#define _JJALLOC_#include <new>    //for placement new#include <cstddef>#include <cstdlib>#include <climits>#include <iostream>namespace JJ{template <class T>inline T* _allocate(ptrdiff_t size, T*)  //分配size * sizeof(T)的内存{set_new_handler(0);T* tmp = (T*)(::operator new((size_t)(size * sizeof(T))));  //申请内存if (tmp == 0){cerr << "out of memory" << endl;}return tmp;}template <class T>inline void _deallocate(T* buffer){::operator delete(buffer);    //为什么不用 delete [] ?  ,operator delete 区别于 delete                              //是一个操作符}template <class T1,class T2>inline void _construct(T1 *p, const T2 &value){new(p) T1(value);  //用value 函数初始化 *p  ?                   //placement new的用法,p内存地址已存在}template <class T>inline void _destory(T *ptr){ptr->~T();}template <class T>class allocator {public :typedef T         value_type;typedef T*        pointer;typedef const T*  const_pointer;typedef T&        reference;typedef const T&  const_reference;typedef size_t    size_type;typedef ptrdiff_t difference_type;template <class U>struct rebind {typedef allocator<U> other;};pointer allocate(size_type n,const void *hint=0){return_allocate((difference_type)n,(pointer)0)}void  deallocate(pointer p, size_type n) { _deallocate(p); }void construct(pointer p, const T& value){_construct(p, value);}void destory(pointer p) { _destory(p); }pointer address(reference x) { return (pointer)&x; }const_pointer const_address(const_reference x) { return (const_pointer)&x; }size_type max_size() const{ return size_type(UINT_MAX / sizeof(T));    //最多分配T元素数}};}
 


参考:《STL源码剖析》P45-46