我听说过很多关于C ++中的单例实现方法,比如Meyer,Phoenix等,但是在某些使用场景中它们似乎都有问题。所以我想出了我自己的实现方法Daniel Singleton。我想知道的是,如果它是正确的......我想是的,但请告诉我它是否有任何我没想到的缺陷!
另外,我试图通过使用双重检查锁定来使线程安全,而不是一直获取锁定,我也阅读了很多,并且每个人都说它已经坏了。我也尝试解决这个问题,我想知道我的解决方案是否正确......如果不是,那么它怎么会失败呢?
答案 0 :(得分:4)
单身模式本身就被打破了,因为它造成了可怕的代码。使用依赖注入/控制反转真的好多了。请参阅my page on avoiding singletons here。
你的单身人士课程不必要地复杂化。看起来你正在实现懒惰的单例模式,而你仍然在获取一个锁,所以 - 除了让事情不必要地复杂化之外 - 我不确定你所做的与简单的懒惰单例实现有很大的不同。您是否对您的实施进行了基准测试,以确定它是否比更简单的替代方案更快?我希望看到一个明显的表现胜利,以便采用更复杂的方式。
答案 1 :(得分:1)
双重检查的锁定模式类似于ascii和IEE754浮点。假设它在你所见过的每个系统上运行良好,即使它没有得到正式保证,也是相当安全的。