1
我有一个简单的对象缓存:如何避免常量-REF返回到一个临时的缓存
class ObjectCache
{
public:
ObjectCache() {}
const Object& object(const std::string &key) const
{
auto it = cache_.find(key);
if (it != cache_.end())
{
return it->second;
}
return Object(); // const-ref to temporary
}
void insert(const std::string &key, const Object &object)
{
cache_[key] = object;
}
private:
std:map<std::string, Object> cache_;
};
返回类型检索从缓存是一个const REF时。
但是,如果未找到该键,则会返回临时参数,并导致调用代码的未定义行为。
如何解决将const ref返回给临时的问题?
一些想法我有:
- 插入并返回指针(缓存取得所有权),nullptr是指未发现
- 提供ObjectCache ::包含了那么调用代码可以访问
- 保持前检查无论是静态对象还是空对象成员,并在找不到时返回对该对象的引用
你已经列出3个选项,他们有什么问题?它主要取决于调用代码应该是什么样子,以及每次返回默认对象时应该是一个新对象还是相同 – user463035818
所有三个选项都是同样有效的IMO。第二个(带有'constains'函数)很容易进行线程数据争夺。 –
第四种解决方案是使用'std :: optional'或'booost :: optiona'来包装引用。 – OutOfBound