小编Mon*_*ica的帖子

使用boost :: pool来管理std :: vector中的内存分配

我希望有一个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;
}
Run Code Online (Sandbox Code Playgroud)

这段代码有效,但我不完全确定原因.我对分配器的概念很陌生,但是如果我理解正确的话,这就是std::vector使用池而不是默认分配器,因此在向量中创建的任何元素都将从池中创建.

我不太确定的是:

游泳池在哪里?

我将如何直接访问池(例如释放内存)?

是否fast_pool_allocator包含池,或者我是否需要单独创建池并以某种方式告诉分配器使用它.

c++ boost vector allocator boost-pool

6
推荐指数
1
解决办法
1557
查看次数

为什么我不能从对象访问和使用成员类型别名?

是否无法typedef从该类的对象访问模板化类的类型别名(或)?例如,为什么以下不可能:

template <typename TKey, typename TData>
class MyClass
{
public:
    using key_t = TKey;
    using data_t = TData;
    TKey key;
    TData data;
    MyClass(TKey _key, TData _data) : key(_key), data(_data) {  }
};

int main() {
    MyClass<int, float> mc{1, 1.0f};
    using DataType = typename mc.data_t; //error: expected ';' after alias declaration
    mc.data_t newData = 2.0f; //error: Cannot refer to type member in 'MyClass<int,float> with '.'

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

有没有另一种方法可以做这样的事情?

c++ type-alias c++17

0
推荐指数
1
解决办法
50
查看次数

标签 统计

c++ ×2

allocator ×1

boost ×1

boost-pool ×1

c++17 ×1

type-alias ×1

vector ×1