【发布时间】:2013-06-26 07:43:11
【问题描述】:
假设我们有一个单例类,其中的 Instance 函数(返回该类的单例实例的函数)已被重载。一个版本接受一些参数,并在类构造函数中初始化对象,另一个版本不接受任何参数。
1. myClass::Instance ( int x, int y );
2. myClass::Instance ( );
我们想要实现的是类的用户应该总是首先调用 (1),并且任何后续调用都应该只对 (2) 进行。不应允许用户第一次调用 (2),一旦调用 (1),就不允许对 (1) 进行后续调用。
是否可以在不将检查 NULL 指针的负担放在类的用户身上来实现这一点?
【问题讨论】:
-
显然,第一个问题应该是,你可以不用 Singleton 吗?
-
单例类solely 确保实例在请求时可用。你的没有(是的,它可用,但你必须先调用这个函数)。如果创建实例的责任在于用户,那么您根本就没有单例(这可能是也可能不是坏事)。
-
@Matthieu M. 不幸的是,在这种情况下需要 Singleton。
-
@n.m.传递给类的参数位于 main(); HWND 和 HINSTANCE (winapi) 以及我们的单例类无法访问这些参数,因此保存参数并将实例返回给用户的单例是否有意义?
-
@StudentX:我同意它可能会变得乏味,但在许多情况下,显式优于隐式。例如,如果您想重新设计您的应用程序以拥有两个窗口而不是一个窗口,该怎么办?然后你将有两个
HWND句柄,根据哪个是活动的,程序应该绘制到一个或另一个。你不能用一个单例来做到这一点......而如果你明确地传递句柄,那将是微不足道的。全局变量(如Singleton)隐藏了数据流,并引入了不可见的依赖关系,这就是它们Bad(tm)的原因。
标签: c++ oop design-patterns singleton