【问题标题】:Static variables inside instance methods - How to fix that?实例方法中的静态变量 - 如何解决这个问题?
【发布时间】:2026-01-09 11:00:02
【问题描述】:

最近我继承了 10 年前的代码库,其中包含一些有趣的模式。其中包括实例方法中的静态变量。仅实例化了该类的单个实例,我几乎找不到理由证明实例方法中存在这些静态变量。

  1. 您是否设计过带有静态变量的实例方法?你的理由是什么?

  2. 如果这种模式被认为不好,那么如何修复它?

注意:此问题与Static variables in instance methods无关

编辑:

一些阅读:

  1. static class and singleton
  2. http://objectmentor.com/resources/articles/SingletonAndMonostate.pdf
  3. http://www.semantics.org/once_weakly/w01_expanding_monostate.pdf

【问题讨论】:

    标签: c++ oop design-patterns static


    【解决方案1】:
    1. 这是 singleton 模式的经典 C++ 实现,在 Scott Meyers 的一本 C++ 书籍中进行了描述。
    2. 单例是controversial pattern,因此对于单例的好坏没有全行业的共识。

    单例的替代方案是纯静态对象。这个question 讨论得很好。

    【讨论】:

    【解决方案2】:

    我唯一一次在可实例化类中使用静态字段是作为常量。

    一般来说,您可能希望将您的类创建为完全静态的或完全可实例化的(您可能希望保持静态的常量除外)。对于单例类,它们的行为方式几乎相同。混合这两种技术的危险在于,如果您决定让该类不再是单例类,您可能会在现在的多实例类中遇到一些奇怪的行为。

    【讨论】:

      【解决方案3】:

      拥有一个静态变量在过程函数中很有用,因为它可以用作一种具有有限范围的全局变量。

      我可以看到在方法中执行此类操作的唯一原因是让变量在多次调用中保持不变,而不必声明没有其他用途的成员变量。老实说,我觉得这只是懒惰的编程,应该避免。

      【讨论】:

      • +1 同意这是惰性编程。而且这不是过程编程,这是 OOP :)
      • 我知道,我只是指出一个可能有用的案例。