如果一个类的成员是静态常量,那么创建该类的成本很高,并且在创建后永远不会更改

Should a member of a class, that is expensive to create and will after creation never change, be static const?

本文关键字:创建 永远 一个 成员 如果 常量 静态      更新时间:2023-10-16

我有一个类,它有一个类型为std::map的成员。这个map是通过调用这个类的方法makeMap()创建的。它读取一个配置文件并填充map。在我的场景中,我创建了这个类的一个实例,并构造了map。然后递归地解决一些问题,涉及对象的许多副本。然而,map保持不变(其他一些成员正在更改(。

这样的map应该是static const吗?由于它在创建后不会更改,并且可以在创建第一个实例时进行创建,因此在复制实例时复制map是没有意义的。

这对static const有用吗?

否。原因是可测试性和耦合性。

通过使其成为静态的,可以防止在测试时注入mock。你也让未来的改变变得更加困难。

尤其是因为创建成本很高,所以在测试时你不想这么做。你可能想要注入一个Mock或Fake。

这是真的,即使它是常量。也许有一天不会?

你可以在这里阅读关于全球状态的负面影响:

https://softwareengineering.stackexchange.com/questions/148108/why-is-global-state-so-evil


现在,为了实用,如果您希望只创建一次映射,但有许多对象实例,则可以在main()中创建它,并使用依赖注入将其传递给构造函数。

您也可以使用生成器设计模式来解决这个问题(而生成器可以将映射作为静态对象(