【发布时间】:2017-03-18 04:46:14
【问题描述】:
我知道单例只允许一个对象的一个实例。单例中声明的每个方法都只会在这个对象上运行。 我想知道为什么不简单地声明一个可以实现相同目标的全局对象?
我肯定忘记了什么。如果存在单例,则必须有特定用途或有助于实现特定机制。
例如:
class Singleton
{
public:
static Singleton& Instance()
{
static Singleton sg;
return sg;
}
void function();
};
将等同于:
class NotSingleton
{
public:
NotSingleon();
~NotSingleton()
void function();
};
NotSingleton nsg;
但是,没有什么能阻止我使用多个 NotSingleton
【问题讨论】:
-
不记得 SO 用户,但有人告诉我它在多线程上下文中更安全。
-
另外,如果使用全局变量,当程序启动时,这个对象必须被初始化。如果你使用 Singleton,那么你可以创建它直到你第一次使用它。在极端情况下,直到程序结束才需要使用它,因此根本不必创建 Singleton。所以使用 Singleton 可以让你只在需要的时候创建它。其次,在多线程程序中,如果只是直接访问全局变量,可能会导致难以调试的问题。
标签: c++ design-patterns