私が作成しているプログラムは、さまざまな種類のリソースのアクセス プールを必要としますが、アクセスできるクラスはわずかです。リソース プールも独自のクラスです。そのため、リソース プールに静的クラスを使用し、この方法で他のユーザーにアクセスさせることにしました。
しかし、プールにリソースを追加する際に奇妙な問題が発生しています。各プールは std::map として表され、挿入後もマップは空のままです。これは、マップが静的クラス内にあることに関係していると思います。これが、ここで意図したとおりにマップが機能しない理由ですか?
リソース プールの関連コード
class ResourcePool {
private:
static ResourcePool m_ResourcePool;
public:
ResourcePool();
~ResourcePool();
static ResourcePool* Instance() { return &m_ResourcePool; }
// Where textures are stored. ci_less is for case comparison of names
std::map <std::string, TextureResource, ci_less> Textures;
TextureResource* getTexture(std::string handle);
};
使用方法の関連コード
Scene::Scene() {
Assets = ResourcePool::Instance();
}
TextureResource* Scene::add(std::string handle, TextureResource Texture) {
// Insertion fails
Assets->Textures.insert(std::make_pair(handle + "_tex", Texture));
// I use this line to debug, the map still shows up empty
unsigned size = Assets->Textures.size();
// look up that texture by its name
return Assets->getTexture(handle);
}
その結果、何も見つからないため、add は NULL を返します。テクスチャを使って何もしていないので、このプログラムはクラッシュしません。今のところ挿入をテストしているだけです。