5

我想要一个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包含一个池,还是我需要单独创建池并以某种方式告诉分配器使用它。

4

2 回答 2

3

在池的情况下,boost::fast_pool_allocator分配器实现拥有一个单例。所以你不需要单独创建任何东西。

get_allocator您可以通过 的函数访问分配器std::vector,也可以使用 中的静态函数boost::fast_pool_allocator

于 2014-07-22T16:08:40.313 回答
3

查看boost 参考,有一个分配器的单例实例,供所有人使用。您可以使用它来分配内存以及释放它,只需创建一个本地boost::fast_pool_allocatorboost::pool_allocator对象即可。

于 2014-07-22T16:16:30.207 回答