助推池地图?

时间:2009-12-04 07:04:42

标签: c++ boost pool

基本上我在尝试集中内存管理时非常弱。无论如何,boost :: pool使用某些大小的块。

我的orignal想法,是重载new并删除,将大小传递给一个单独的,它将转到相应的boost池并从那里分配。

std::map<size_t, boost::pool<> > m_MemPools;

无论如何,似乎我不能拥有增强池的地图,因为MSVC9给了我以下错误,

:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\map(173) : error C2512: 'boost::pool<>::pool' : no appropriate default constructor available

为什么会这样?

修改

我解决了它,我最终将它包装在shared_ptr中,这解决了问题。

只是为了展示一些东西,我不再使用[]了,它仍然会出现这个错误,

class Pooly
{
public:

    Foo()
    {
    }

    void RegisterPool(__in const size_t poolSize)
    {
        if(pools.find(poolSize) == pools.end())
            pools.insert(std::make_pair(poolSize, boost::pool<>(poolSize)));
    }
private:
    std::map<size_t, boost::pool<> > pools;
};

我猜它与std :: make_pair有关?

Etherway将它包装成一个智能指针工作正常,但这不应该包含在boost池中吗?

1 个答案:

答案 0 :(得分:1)

您是否使用[]运算符插入地图?这要求data_type(在本例中为boost::pool)是默认可构造的,即它必须具有不带参数的默认构造函数。但boost::pool没有默认构造函数。