Ich möchte eine std::vector
Objekte haben, mit den Objekten unter Verwendung boost::pool
zugeordnet. Ist so etwas korrekt:Mit boost :: pool, um die Speicherzuweisungen in einem std :: vector zu verwalten
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;
}
Dieser Code funktioniert, aber ich bin mir nicht ganz sicher warum. Ich bin ziemlich neu im Konzept der Allokatoren, aber wenn ich richtig verstehe, sagt dies std::vector
, um einen Pool anstelle des Standard-Allokators zu verwenden, so dass alle im Vektor erstellten Elemente aus einem Pool erstellt werden.
Was ich bin mir nicht ganz sicher ist:
Wo ist der Pool?
Und wie würde ich direkt auf den Pool zugreifen (um zum Beispiel Speicher freizugeben)?
Enthält fast_pool_allocator
einen Pool, oder muss ich den Pool separat erstellen und dem Zuordner irgendwie mitteilen, ihn zu verwenden?
Sie könnten z.B. [Diese 'std :: vector' Referenz] (http://en.cppreference.com/w/cpp/container/vector). Ich bin sicher, dass Sie eine geeignete Funktion finden können, um den Allokator zu bekommen. Vielleicht möchten Sie auch die ['std :: vector' Konstruktoren] (http://en.cppreference.com/w/cpp/container/vector/vector) auschecken. –
Die [Boost-Referenz] (http://www.boost.org/doc/libs/1_55_0/libs/pool/doc/html/boost/fast_pool_allocator.html) sagt, 'boost :: pool_allocator' mit' std: : Vektor'. –