基本的に、メモリ管理を集中化しようとする試みは非常に弱いものです。とにかく、boost::pool は特定のサイズのチャンクを使用します。
私の最初のアイデアは、new と delete をオーバーロードし、サイズをシングルトンに渡して、対応するブースト プールに移動し、そこから割り当てることでした。
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 は正常に動作しますが、これはブースト プールに含める必要がありますか?