карта буст-пулов? - PullRequest
       19

карта буст-пулов?

1 голос
/ 04 декабря 2009

По сути, я очень слабо пытаюсь централизовать управление памятью. В любом случае, boost :: pool использует куски определенных размеров.

Моя оригинальная идея состояла в том, чтобы перегрузить новое и удалить, передать размер в синглтон, который перешел бы в соответствующий пул повышения и выделил оттуда.

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

Почему это происходит?

EDIT

Я решил, я просто обернул его в 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, оборачивая его умным указателем, работает нормально, разве это не должно быть чем-то, что должно быть включено в пул повышения мощности?

1 Ответ

1 голос
/ 04 декабря 2009

Вы используете оператор [] для вставки в карту? Это требует, чтобы data_type, в данном случае boost::pool, было конструируемым по умолчанию, то есть он должен иметь конструктор по умолчанию, который не принимает аргументов. Но boost::pool не имеет конструктора по умолчанию.

...