Я хочу иметь std::vector
объектов, с объектами, выделенными с использованием boost::pool
, Это что-то вроде правильно:
class MyClass
{
private:
double data;
public:
MyClass(double d) : data(d) { }
};
int main()
{
std::vector<MyClass, boost::fast_pool_allocator<MyClass> > vect;
vect.push_back(4.5);
vect.push_back(9.8); //Are these being stored in a pool now?
return 0;
}
Этот код работает, но я не совсем уверен, почему. Я совершенно новичок в концепции распределителей, но если я правильно понимаю, это говорит std::vector
использовать пул вместо распределителя по умолчанию, поэтому любые элементы, созданные в векторе, будут созданы из пула.
В чем я не совсем уверен, так это:
Где бассейн?
И как я могу получить доступ к пулу напрямую (например, для освобождения памяти)?
Есть ли fast_pool_allocator
содержать пул, или мне нужно создать пул отдельно и как-то сказать распределителю использовать его.
В случае boost::fast_pool_allocator
пул — это синглтон, принадлежащий реализации распределителя. Так что вам не нужно ничего создавать отдельно.
Вы можете получить доступ к распределителю через get_allocator
функция std::vector
или вы можете использовать статические функции в boost::fast_pool_allocator
,
Глядя на повысить ссылку, есть единственный экземпляр распределителя, который используется всеми. Вы можете использовать его как для выделения памяти, так и для ее освобождения, просто создав локальную boost::fast_pool_allocator
или же boost::pool_allocator
объект.