1

基本的に、メモリ管理を集中化しようとする試みは非常に弱いものです。とにかく、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 は正常に動作しますが、これはブースト プールに含める必要がありますか?

4

1 に答える 1

1

演算子を使用[]してマップに挿入していますか? これにはdata_type、この場合boost::poolは がデフォルトで構築可能である必要があります。つまり、引数を取らないデフォルトのコンストラクタが必要です。ただしboost::pool、デフォルトのコンストラクターはありません。

于 2009-12-04T07:17:27.790 に答える