C++ Singleton设计问题

Hap*_*cky 4 c++ singleton constructor

我要求在任何给定的时间点只有一个类的单个实例.单身人士是明显的候选人.但我还有其他一些不典型的单身人士的情况.

  1. 单例的生命周期不是程序的生命周期.每次进入特定状态时都必须创建此对象,并在离开状态时将其销毁.在整个状态期间,我无法创建该类的另一个实例.
  2. 每次,我进入状态并创建一个新实例,我需要将变量传递给单例.它是一个基于用户选择的数字.

所以我的实现有以下静态函数 -

// To be called exactly once, everytime I enter the state
void MySingleton::CreateInstance(size_t count);

// To be called any no. of times during the state
MySingleton * MySingleton::GetInstance();   

// To be called exactly once, when leaving the state.
void MySingleton::DestroyInstance();        
Run Code Online (Sandbox Code Playgroud)

现在,这种实现是传统单例实现的主要迂回.

这种实施有什么问题吗?

还有更好的选择吗?

Jam*_*lis 12

如果每次进入给定状态时都创建一个实例,并在每次离开该状态时将其销毁,那么让实例归属于管理状态转换(或者知道状态的其他实体)所有者更有意义.转换).

例如,您可以将一个指向实例的智能指针作为状态管理器的成员变量.当您转换到状态时,您可以将其初始化为新实例,当您转出状态时,您可以销毁该实例.

在我看来,这将比使用单一设计(反)模式更清洁,更可取.


sbi*_*sbi 5

这种实施有什么问题吗?

是的.问题是这不是Singleton,因为它不是"Singleton"模式的全部内容.这是一个简单的变量,是你进入和离开的那个州的本地变量.

实际上,Singletons只是美化的全局变量,在应用程序的整个生命周期中都存在,并且无论如何都应该尽可能地被阻止.你的"单身人士"不是全球性的,而是一个地方性的.

  • @San Jacinto:我很高兴地同意Singleton通常比显式全局变量更好.通常,您不应该使用Singleton或全局变量. (2认同)