基本上,在尝试集中化内存管理方面,我几乎没有采取任何措施。无论如何,boost::pool使用某些大小的块。

我的原始想法是重载new和delete,将大小传递到一个单例中,该单例将进入相应的boost池并从那里分配。

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

无论如何,由于MSVC9给我以下错误,所以我似乎无法获得增强池的 map ,
:\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有关吗?

以太坊将其包装为智能指针可以正常工作,这是否应该包含在增强池中呢?

最佳答案

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

10-02 00:58
查看更多