我有一个缓存,它在无序映射中存储对象的唯一ptrs,并为缓存的用户返回对象的引用。它会按预期方式工作,将对象存储到超出范围为止。
缓存的实现如下:
将对象存储在缓存中:
template<typename T>
template<typename... Args>
void ResourceCache<T>::add(const std::string& name, Args... args)
{
m_cache->try_emplace(name, std::make_unique<T>(args...));
}
从缓存中获取对象:
template<typename T>
T& ResourceCache<T>::getCachedElement(const std::string& name) const
{
auto it = m_cache->find(name);
if(it != m_cache->end())
return *it->second;
throw "resource not found";
}
但是现在我进入一个问题,即引用并不总是我想从缓存中获取的,例如:
我有以下对象:
class GameObject
{
public:
void translate(const cheetah::Vector3f& position);
protected:
Quaternion m_rotation;
Vector3f m_position;
};
让我说该对象具有纹理,目前对我来说唯一的方法是添加一个成员引用
Texture& m_texture
[这将导致我不得不要么
现在我的问题是
在这种特定情况下,什么是最佳做法?我应该使用上述选项之一还是错过了更好的选择?
我知道我的问题不是最具体的,但是我正在自己学习c ++,很高兴得到其他人对此的看法。
假设ResourceCache
保持Texture
,这是我的想法。一般而言,似乎没有最好的解决方案。
nullptr
ResourceCache
的寿命超过所有GameObject
-寿命必须手动管理