我想要一个 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
使用池而不是默认分配器,因此在 vector 中创建的任何元素都将从创建一个游泳池。
我不太确定的是:
游泳池在哪里?
我如何直接访问池(例如释放内存)?
fast_pool_allocator
是否包含池,或者我是否需要单独创建池并以某种方式告诉分配器使用它。
最佳答案
在 boost::fast_pool_allocator
的情况下,池是分配器实现拥有的单例。所以您不需要单独创建任何东西。
您可以通过 std::vector
的 get_allocator
函数访问分配器,或者您可以使用 boost::fast_pool_allocator
中的静态函数。
关于c++ - 使用 boost::pool 管理 std::vector 中的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24892265/