Spec-Zone .ru
спецификации, руководства, описания, API
|
ADC домой > Ссылочная библиотека> Ссылка> Дарвин> Разное пространство пользователя ссылка API
|
stl_alloc.h |
Включает: |
Это - внутренний заголовочный файл, включенный другими заголовками библиотеки. Вы не должны пытаться использовать его непосредственно.
оператор == |
template<int inst> inline bool operator==( const __malloc_alloc_template<inst>&, const __malloc_alloc_template<inst>&)
Операторы сравнения для всех средств выделения SGI-стиля predifined. Это гарантирует, что __ средство выделения
_Alloc_traits |
// The fully general version. template<typename _Tp, typename _Allocator> struct _Alloc_traits { static const bool _S_instanceless = false; typedef typename _Allocator::template rebind<_Tp>::other allocator_type; };
@if maint Другой адаптер средства выделения: _Alloc_traits. Это служит двум целям. Во-первых, позвольте записать контейнеры, которые могут использовать или средства выделения стиля «SGI» или «стандартные» средства выделения. Во-вторых, обеспечьте механизм так, чтобы контейнеры могли запросить, имеет ли средство выделения отличные экземпляры. В противном случае контейнер может избежать тратить впустую слово памяти, чтобы хранить пустой объект. Для примеров использования см. stl_vector.h, и т.д., или любой из других классов, полученных от этого.
Этот адаптер использует частичную специализацию. Общий случай _Alloc_traits<_Tp, _Alloc> предполагает, что _Alloc является приспосабливающим стандарту средством выделения, возможно с неравными экземплярами и нестатическими элементами. (Это все еще ведет себя правильно, даже если _Alloc имеет статический элемент и если все экземпляры равны. Улучшения влияют на производительность, не правильность.)
Всегда существует два элемента: allocator_type, который является стандартом - соответствующий тип средства выделения для выделения объектов типа _Tp, и _S_instanceless, статический элемент константы типа bool. Если _S_instanceless является истиной, это означает, что нет никакого различия ни между какими двумя экземплярами типа allocator_type. Кроме того, если _S_instanceless является истиной, то _Alloc_traits имеет один дополнительный элемент: _Alloc_type. Этот тип инкапсулирует выделение и освобождение объектов типа _Tp через статический интерфейс; это имеет две функции членства, подписи которых
- статические _Tp* выделяют (size_t) - статичный недействительный, освобождают (_Tp*, size_t)
size_t параметры являются «стандартным» стилем (см. вершину stl_alloc.h), в котором они берут количества, не размеры.
@endif (См. информацию средств выделения @endlink для больше.)
__ средство выделения |
template<typename _Tp, typename _Alloc> struct __allocator { _Alloc __underlying_alloc; typedef size_t size_type; typedef ptrdiff_t difference_type; typedef _Tp*pointer; typedef const _Tp*const_pointer; typedef _Tp& reference; typedef const _Tp& const_reference; typedef _Tp value_type; template<typename _Tp1> struct rebind { typedef __allocator<_Tp1, _Alloc> other; }; __allocator() throw() { } __allocator( const __allocator& __a) throw() : __underlying_alloc(__a.__underlying_alloc) { } template<typename _Tp1> __allocator( const __allocator<_Tp1, _Alloc>& __a) throw() : __underlying_alloc(__a.__underlying_alloc) { } ~__allocator() throw() { } pointer address( reference __x) const { return &__x; } const_pointer address( const_reference __x) const { return &__x; } // NB: __n is permitted to be 0. The C++ standard says nothing // about what the return value is when __n == 0. _Tp* allocate(size_type __n, const void* = 0) { _Tp* __ret = 0; if ( __n) __ret = static_cast<_Tp*>( _Alloc::allocate( __n * sizeof( _Tp))); return __ret; } // __p is not permitted to be a null pointer. void deallocate(pointer __p, size_type __n) { __underlying_alloc.deallocate( __p, __n * sizeof( _Tp)); } size_type max_size() const throw() { return size_t( -1) / sizeof( _Tp); } void construct(pointer __p, const _Tp& __val) { new( __p) _Tp( __val); } void destroy(pointer __p) { __p->~_Tp(); } };
@if maint адаптер Средства выделения для превращения «SGI» разрабатывают средство выделения (например, __ выделение, __ malloc_alloc_template) в «стандартное» средство выделения приспосабливания. Обратите внимание на то, что этот адаптер делает *не*, предполагают, что все объекты базового класса выделения идентичны, и при этом это не предполагает, что все функции членства базового выделения являются статическими функциями членства. Отметьте, также, что __ средство выделения<_Tp, __alloc> является по существу той же вещью как средство выделения<_Tp>. @endif (См. информацию средств выделения @endlink для больше.)
Последнее обновление: 20.06.2006