2014-07-22 18 views
5

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ć.

+1

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). –

+1

[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. –

Odpowiedz

3

W przypadku boost::fast_pool_allocator pula jest singletonem należącym do implementacji przydziału. Nie musisz więc tworzyć niczego osobno.

Dostęp do przydziału można uzyskać za pomocą funkcji get_allocator pod numerem std::vector lub można użyć funkcji statycznych w boost::fast_pool_allocator.

3

Patrząc na boost reference, istnieje singleton wystąpienie alokatora, który jest używany przez wszystkich. Za jego pomocą można przydzielić pamięć i zwolnić ją, po prostu tworząc lokalny obiekt boost::fast_pool_allocator lub boost::pool_allocator.

Powiązane problemy