1 namespace std 2 { 3 /** 4 * @brief The "standard" allocator, as per [20.4]. 5 * 6 * The private _Alloc is "SGI" style. (See comments at the top 7 * of stl_alloc.h.) 8 * 9 * The underlying allocator behaves as follows. 10 * - __default_alloc_template is used via two typedefs 11 * - "__single_client_alloc" typedef does no locking for threads 12 * - "__alloc" typedef is threadsafe via the locks 13 * - __new_alloc is used for memory requests 14 * 15 * (See @link Allocators allocators info @endlink for more.) 16 */ 17 template<typename _Tp> 18 class allocator 19 { 20 public: 21 typedef size_t size_type; 22 typedef ptrdiff_t difference_type; 23 typedef _Tp* pointer; 24 typedef const _Tp* const_pointer; 25 typedef _Tp& reference; 26 typedef const _Tp& const_reference; 27 typedef _Tp value_type; 28 29 template<typename _Tp1> 30 struct rebind; 31 32 allocator() throw(); 33 34 allocator(const allocator&) throw(); 35 template<typename _Tp1> 36 allocator(const allocator<_Tp1>&) throw(); 37 ~allocator() throw(); 38 39 40 pointer 41 address(reference __x) const; 42 43 44 const_pointer 45 address(const_reference __x) const; 46 47 48 // NB: __n is permitted to be 0. The C++ standard says nothing 49 // about what the return value is when __n == 0. 50 _Tp* 51 allocate(size_type __n, const void* = 0); 52 53 // __p is not permitted to be a null pointer. 54 void 55 deallocate(pointer __p, size_type __n); 56 57 size_type 58 max_size() const throw(); 59 60 void construct(pointer __p, const _Tp& __val); 61 void destroy(pointer __p); 62 }; 63 64 template<> 65 class allocator<void> 66 { 67 public: 68 typedef size_t size_type; 69 typedef ptrdiff_t difference_type; 70 typedef void* pointer; 71 typedef const void* const_pointer; 72 typedef void value_type; 73 74 template<typename _Tp1> 75 struct rebind; 76 }; 77 } // namespace std 78