Chcę mieć obiekty z obiektami przydzielonymi przy użyciu boost::pool
. Czy coś takiego jest poprawne:Używanie boost :: pool do zarządzania przydziałami pamięci w std :: vector
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;
}
Ten kod działa, ale nie jestem do końca pewien, dlaczego. Jestem całkiem nowy w koncepcji alokatorów, ale jeśli dobrze rozumiem, to mówi się, aby użyć puli zamiast domyślnego przydziału, więc wszystkie elementy utworzone w wektorze zostaną utworzone z puli.
Co nie jestem dokładnie pewien, to:
Gdzie jest basen?
Jak uzyskać dostęp do puli bezpośrednio (na przykład w celu zwolnienia pamięci)?
Czy w puli jest fast_pool_allocator
? Czy muszę utworzyć pulę osobno i jakoś powiedzieć alokatorowi, aby go użyć.
Możesz przeczytać np. [this 'std :: vector' reference] (http://en.cppreference.com/w/cpp/container/vector). Jestem pewien, że możesz znaleźć odpowiednią funkcję, aby uzyskać alokator. Możesz także chcieć sprawdzić konstruktory ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector/vector). –
[Wzmianka o pobudzeniu] (http://www.boost.org/doc/libs/1_55_0/libs/pool/doc/html/boost/fast_pool_allocator.html) mówi o użyciu 'boost :: pool_allocator' z' std: : wektor. –