Boost.Pool: различия между версиями

Содержимое удалено Содержимое добавлено
Нет описания правки
м <source> -> <syntaxhighlight> (phab:T237267)
 
Строка 70:
Существует два UserAllocator класса. Оба находятся в  pool.hpp. <br />
По умолчанию, параметром шаблона UserAllocator всегда является  default_user_allocator_new_delete. <br />
<sourcesyntaxhighlight lang="cpp">
struct default_user_allocator_new_delete
{
Строка 134:
}
} // при завершении функции, p уничтожается, и вся выделенная под int память неявно освобождается.
</syntaxhighlight>
</source>
 
==== Object_pool ====
Строка 142:
 
'''''Синопсис''''' <br />
<sourcesyntaxhighlight lang="cpp">template <typename ElementType, typename UserAllocator = default_user_allocator_new_delete>
class object_pool
{
Строка 165:
// other construct() functions
void destroy(element_type * p);
};</sourcesyntaxhighlight>
Параметры шаблона: <br />
'''''ElementType'''''<br />
Строка 171:
'''''UserAllocator'''''<br />
Определяет метод, используемый Pool для выделения системной памяти. По умолчанию это default_user_allocator_new_delete. <br />Подробнее смотрите __UserAllocator .<br />
Пример: <sourcesyntaxhighlight lang="cpp">struct X { ... }; // деструктор с побочным эффектом.
void func()
{
Строка 180:
... // Делаем что-либо с t; не тратим время на вызов free().
}
} при завершении функции, p уничтожается, и вся выделенная под Х объекты память неявно освобождается..</sourcesyntaxhighlight>
 
==== Singleton_pool ====
Интерфейс singleton_pool в singleton_pool.hpp построен с применением Singleton и возвращает NULL при нехватке памяти. Идентичен интерфейсу pool за исключением того, что использует Singleton вместо Object. <br />
'''''Синопсис'''''
<sourcesyntaxhighlight lang="cpp">template <typename Tag, unsigned RequestedSize,
typename UserAllocator = default_user_allocator_new_delete>
struct singleton_pool
Строка 216:
static bool release_memory();
static bool purge_memory();
};</sourcesyntaxhighlight>
Примечание <br />
Внутренний pool p  используемый статическими функциями в singleton_pool  в действительности объявлен другим способом, поэтому:
Строка 234:
 
Пример:  <br />
<sourcesyntaxhighlight lang="cpp">
struct MyPoolTag { };
typedef boost::singleton_pool<MyPoolTag, sizeof(int)> my_pool;
Строка 247:
my_pool::purge_memory();
}
</syntaxhighlight>
</source>
 
==== pool_allocator ====
Строка 259:
'''''Синопсис'''''
 
<sourcesyntaxhighlight lang="cpp">
struct pool_allocator_tag { };
template <typename T,
Строка 346:
static pointer allocate();
static void deallocate(pointer ptr);
};</sourcesyntaxhighlight>
 
'''''Параметры шаблона'''''
Строка 353:
''UserAllocator'' определяет метод, используемый внутренней реализацией для выделения памяти из системы. Подробнее смотрите User Allocators.<br />
Пример:<br />
<sourcesyntaxhighlight lang="cpp">
void func()
{
Строка 364:
// boost::singleton_pool<boost::pool_allocator_tag, sizeof(int)>::release_memory();
// чтобы принудительно освободить системную память
</syntaxhighlight>
</source>
 
== Подробнее о Pool ==