【发布时间】:2009-03-18 11:48:46
【问题描述】:
我有一个 Message 类,它使用查找表来解析文本消息。我收到了很多消息并创建和销毁了很多对象,所以我想我将这些查找表声明为静态成员,以防止一次又一次地用相同的值初始化相同的表。
这是正确的方法还是有更合适的 C++ 方法?
谢谢。
【问题讨论】:
我有一个 Message 类,它使用查找表来解析文本消息。我收到了很多消息并创建和销毁了很多对象,所以我想我将这些查找表声明为静态成员,以防止一次又一次地用相同的值初始化相同的表。
这是正确的方法还是有更合适的 C++ 方法?
谢谢。
【问题讨论】:
如果您的消息类共享查找信息,则可能值得将您的静态查找抽象为它们自己的类,以便它们实际上只初始化一次。
但无论如何,静态类成员肯定是要走的路。
【讨论】:
它们可以是类变量,即类级别的静态变量。这样,它们对子类(如果有)可用,并且可能比在单个方法中作为静态局部变量“隐藏”时更明显。
【讨论】:
这听起来像是正确的方法,尽管我希望编译器对此进行优化。您是否对您的应用程序进行了基准测试,并且将表声明为静态会加快速度?
还要注意,如果您有很多大型查找表,性能会提高,但这些表会一直保存在内存中。
【讨论】:
是的,一切都好。有时这是一个很好的解决方案:静态函数,它只会创建一次。您也可以使用单例对象,但它具有更广泛的可访问性。
如果您有多线程应用程序并且您的查找表包含指向另一个数据的指针,该数据可能会在此表之前被销毁,请小心。
【讨论】:
使用单例模式也可以解决这个问题。
【讨论】: