// In header: <boost/interprocess/allocators/allocator.hpp>
template<typename T,typename SegmentManager>classallocator{public:// typestypedefSegmentManagersegment_manager;typedefSegmentManager::void_pointervoid_pointer;typedefTvalue_type;typedefboost::intrusive::pointer_traits<cvoid_ptr>::templaterebind_pointer<T>::typepointer;typedefboost::intrusive::pointer_traits<pointer>::templaterebind_pointer<constT>::typeconst_pointer;typedefunspecifiedreference;typedefunspecifiedconst_reference;typedefsegment_manager::size_typesize_type;typedefsegment_manager::difference_typedifference_type;typedefboost::interprocess::version_type<allocator,2>version;// member classes/structs/unionstemplate<typename T2>structrebind{// typestypedefallocator<T2,SegmentManager>other;};// construct/copy/destructallocator(segment_manager*);allocator(constallocator&);template<typename T2>allocator(constallocator<T2,SegmentManager>&);// public member functionssegment_manager*get_segment_manager()const;pointerallocate(size_type,cvoid_ptr=0);voiddeallocate(constpointer&,size_type);size_typemax_size()const;size_typesize(constpointer&)const;pointerallocation_command(boost::interprocess::allocation_type,size_type,size_type&,pointer&);voidallocate_many(size_type,size_type,multiallocation_chain&);voidallocate_many(constsize_type*,size_type,multiallocation_chain&);voiddeallocate_many(multiallocation_chain&);pointerallocate_one();voidallocate_individual(size_type,multiallocation_chain&);voiddeallocate_one(constpointer&);voiddeallocate_individual(multiallocation_chain&);pointeraddress(reference)const;const_pointeraddress(const_reference)const;template<typename P>voidconstruct(constpointer&,P&&);voiddestroy(constpointer&);// friend functionsfriendvoidswap(self_t&,self_t&);};
Description
STL-совместимый распределитель, который использует менеджер сегментов в качестве источника памяти. Внутренний тип указателя будет того же типа (сырой, умный), что и тип «типовое имя SegmentManager::void_pointer». Это позволяет разместить распределитель в общей памяти, карт памяти-файлы и т.д.
allocator
public
construct/copy/destruct
<
allocator(segment_manager*segment_mngr);
>
Конструктор от менеджера сегмента. Никогда не бросать
Распределяет ранее выделенную память. Никогда не бросайте
<
size_typemax_size()const;
>
Возвращает количество элементов, которые можно было бы выделить. Никогда не бросайте
<
size_typesize(constpointer&p)const;
>
Возвращает максимальное количество объектов, которые может удерживать ранее выделенная память, указанная p. Этот размер работает только для памяти, выделенной с выделением, выделением_командой и выделением_многими.
Выделяет множество элементов размера elem_size в смежный блок памяти. Минимальное число, которое должно быть выделено, - это min_элементы, предпочтительное и максимальное число - предпочтительные_элементы. Количество фактически выделенных элементов будет присвоено для receive_size. Элементы должны быть размещены с помощью соглашения (...)
Выделяет элементы n_элементов, каждый из которых размером elem_sizes[i] в смежный блок памяти. Элементы должны быть размещены
<
voiddeallocate_many(multiallocation_chain&chain);
>
Выделяет множество элементов размера elem_size в смежный блок памяти. Минимальное число, которое должно быть выделено, - это min_элементы, предпочтительное и максимальное число - предпочтительные_элементы. Количество фактически выделенных элементов будет присвоено для receive_size. Элементы должны быть размещены с помощью соглашения (...)
<
pointerallocate_one();
>
Выделяют только один объект. Память, выделенная с этой функцией, должна быть размещена только с помощью deallocate_one(). Бросает<boost::interprocess::bad_alloc>, если не хватает памяти
Выделяет множество элементов размера == 1 в смежном блоке памяти. Минимальное число, которое должно быть выделено, - это min_элементы, предпочтительное и максимальное число - предпочтительные_элементы. Количество фактически выделенных элементов будет присвоено для receive_size. Память, выделенная с этой функцией, должна быть размещена только с помощью deallocate_one().
<
voiddeallocate_one(constpointer&p);
>
Выделяет память, ранее выделенную с выделением_one(). Вы никогда не должны использовать deallocate_one для обработки памяти, выделенной с другими функциями, отличными от allocate_one(). Никогда не бросайте
Выделяет множество элементов размера == 1 в смежном блоке памяти. Минимальное число, которое должно быть выделено, - это min_элементы, предпочтительное и максимальное число - предпочтительные_элементы. Количество фактически выделенных элементов будет присвоено для receive_size. Память, выделенная с этой функцией, должна быть размещена только с помощью deallocate_one().
<
pointeraddress(referencevalue)const;
>
Возвращает адрес изменяемого объекта. Никогда не бросайте
<
const_pointeraddress(const_referencevalue)const;
>
Возвращает адрес неизменяемого объекта. Никогда не бросайте
Построение объекта Бросает, если конструктор Т бросает Для обратной совместимости с библиотеками с помощью распределителей C++03
<
voiddestroy(constpointer&ptr);
>
Уничтожает объект. Бросает, если разрушитель объекта бросает
allocator friend functions
<
friendvoidswap(self_t&alloc1,self_t&alloc2);
>
Менеджер сегмента свопа. Не бросает. Если каждый распределитель размещен в разных сегментах памяти, результат не определен.
Статья Class template allocator раздела The Boost C++ Libraries BoostBook Documentation Subset Indexes and Reference может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.