首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >牺牲常量来换取速度可以吗?

牺牲常量来换取速度可以吗?
EN

Stack Overflow用户
提问于 2012-09-03 03:01:49
回答 2查看 139关注 0票数 3

我有一个工厂类,它将用于创建某个类的大量实例。创建过程相当混乱,可能需要相当长的一段时间。所以我在想,将已经在工厂中创建的类的实例存储起来是很聪明的,我可以稍后再调用它们。

创建依赖于单个参数(名称),因此可以将内容存储在我称为old_instancesstd::map中。

代码语言:javascript
运行
复制
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让我有点尴尬。这些牺牲合乎逻辑吗?

如果这个问题太依赖于品味,请不要射我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-03 03:37:13

这是使用mutable的经典示例。只要外部行为确实是const的行为,您就应该可以这样做。

票数 3
EN

Stack Overflow用户

发布于 2012-09-03 03:26:44

这取决于你-如果你认为old_instances的状态对你的类的客户端代码没有任何可观察到的/概念性的区别,那么你可以将其设置为可变的,并使工厂函数为const。但你真的应该确保它是真实的,否则你只会让你自己或其他人在以后阅读你的代码时感到困惑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12238873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档