我有一个工厂类,它将用于创建某个类的大量实例。创建过程相当混乱,可能需要相当长的一段时间。所以我在想,将已经在工厂中创建的类的实例存储起来是很聪明的,我可以稍后再调用它们。
创建依赖于单个参数(名称),因此可以将内容存储在我称为old_instances的std::map中。
A A_factory::make_A(std::string const& name)
{
if ( old_instances.find(name) != old_instances.end() )
{
return old_instances.find(name) -> second;
}
else
{
// obfuscated creation process that creates instance 'new_A'
// ...
old_instances.insert(std::pair<std::string, A>(name, new_A)); // <- problem
return new_A;
}
}这里的问题是,整个例程可能是工厂的const成员。而是因为old_instances被改编了。
为了这么微不足道的事情,牺牲函数的const-ness让我有点尴尬。这些牺牲合乎逻辑吗?
如果这个问题太依赖于品味,请不要射我。
发布于 2012-09-03 03:37:13
这是使用mutable的经典示例。只要外部行为确实是const的行为,您就应该可以这样做。
发布于 2012-09-03 03:26:44
这取决于你-如果你认为old_instances的状态对你的类的客户端代码没有任何可观察到的/概念性的区别,那么你可以将其设置为可变的,并使工厂函数为const。但你真的应该确保它是真实的,否则你只会让你自己或其他人在以后阅读你的代码时感到困惑。
https://stackoverflow.com/questions/12238873
复制相似问题