c++ - 使用 boost::pool 管理 std::vector 中的内存分配

标签 c++ boost vector allocator boost-pool

我想要一个 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::vectorget_allocator 函数访问分配器,或者您可以使用 boost::fast_pool_allocator 中的静态函数。

关于c++ - 使用 boost::pool 管理 std::vector 中的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24892265/

相关文章:

c++ - Pybind11:将元组列表从Python传递到C++

c++ - 带有 boost 的 XML 序列化( '.serialize' 的左边必须有类/结构/union )

带有对象指针的 C++ vector

c++ - 不能在从 std::vector 继承的类中使用 typedef 迭代器

c++ - 如何在 C++ 中对 vector 组元素进行排序?

c++ - 搜索 C++ 的 BNF(对于 yacc)语法

c++ - 计算失败,因为 - nan

c++ - 如何追踪 COM 内存泄漏

c++ - 绕过 Boost Multi-Index 容器的常量元素

c++ - boost 模拟 C# 的 IEnumerable 的方式?