【发布时间】:2010-11-03 17:28:25
【问题描述】:
最近我遇到了 C++ 单例设计模式的实现/实现。它看起来像这样(我从现实生活中采用了它):
// a lot of methods are omitted here
class Singleton
{
public:
static Singleton* getInstance( );
~Singleton( );
private:
Singleton( );
static Singleton* instance;
};
从这个声明中,我可以推断出实例字段是在堆上启动的。这意味着有内存分配。对我来说完全不清楚的是何时释放内存?还是有错误和内存泄漏?执行起来好像有问题。
我的主要问题是,如何以正确的方式实现它?
【问题讨论】:
-
您将在本文中找到关于如何实现单例以及 C++ 中的线程安全的精彩讨论。 aristeia.com/Papers/DDJ%5FJul%5FAug%5F2004%5Frevised.pdf
-
@sbi - 只有西斯在绝对交易。如果没有 Singletons,绝大多数问题都可以解决吗?绝对地。单身人士会导致自己的问题吗?是的。但是,我不能老实说它们不好,因为设计就是要考虑权衡和理解方法的细微差别。
-
@derekerdmann:我并不是说你永远不需要全局变量(当你需要一个全局变量时,单例有时会更好)。我说的是应该尽可能少地使用它们。将 Singleton 美化为一种有价值的设计模式给人的印象是使用它很好,而不是它是一种 hack,使代码难以理解、难以维护和难以测试。这就是我发表评论的原因。到目前为止,您所说的没有一个与此相矛盾。
-
@sbi:你说的是“不要使用它们”。不是你后来改成的更合理的“它们应该尽可能少地使用”——你肯定看到了区别。
标签: c++ design-patterns singleton