Использование boost :: pool для управления распределением памяти в std :: vector

Я хочу иметь 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 содержать пул, или мне нужно создать пул отдельно и как-то сказать распределителю использовать его.

5

Решение

В случае boost::fast_pool_allocator пул — это синглтон, принадлежащий реализации распределителя. Так что вам не нужно ничего создавать отдельно.

Вы можете получить доступ к распределителю через get_allocator функция std::vectorили вы можете использовать статические функции в boost::fast_pool_allocator,

3

Другие решения

Глядя на повысить ссылку, есть единственный экземпляр распределителя, который используется всеми. Вы можете использовать его как для выделения памяти, так и для ее освобождения, просто создав локальную boost::fast_pool_allocator или же boost::pool_allocator объект.

3

По вопросам рекламы [email protected]