Modern C++ Design 笔记 第六章 Implementing Singletons(2)

本文是Modern C++ Design笔记的第六章,详细介绍了多种Singleton模式的实现方式,包括静态成员变量、静态函数、线程安全的Singleton以及使用模板的SingletonHolder。讨论了如何在多线程环境下保证Singleton的正确初始化和销毁,防止死引用问题,并提供了相应的代码实现。
摘要由CSDN通过智能技术生成
说来惭愧,大学没有好好学,第一次听到这个所谓Singleton的时候是在一个校园招聘会上。大致的题目就是要写一个Singleton,答案么大概也可以预计,就是什么都不知道, 呵呵。时过境迁,也写过了一些这样的东西,现在回过头来,还有很有意义的。不搞的特别另类,还是循着书中介绍的顺序来看看吧。
  1. // Header file Singleton.h
  2. class Singleton
  3. {
  4. public:
  5.       static Singleton* Instance() // Unique point of access
  6.       {
  7.          return &instance_;
  8.       }
  9.       int DoSomething();
  10. private:
  11.       Singleton();
  12.       Singleton(const Singleton&);
  13.       Singleton& operator=(const Singleton&);
  14.       ~Singleton();
  15. };
  16. // Implementation file Singleton.cpp
  17. Singleton Singleton::instance_;

大致看上去这个东西还是比较怪异的,怪异在什么地方呢?就是这个static的instance_是一个object而不是一个指针。这个带来什么问题呢?就是这个变量的初始化时间不是程序员决定的而是编译器决定的。这样的话一些其他的变量如果对之有依赖的话,就会引发一些没有定义的行为。比如说这里在其他文件中( 注意其他文件中)有另一个全局变量.
  1. int globala = Singleton::Instance()->DoSomething();
那这个globala在创建的时候就是未定义的。 当然这种行为只是未定义而不是一定是错的,就我用MS的编译器测试来看,instance_是可以被正确的初始化的,同时类似的行为用一个全部变量来初始化另一全局变量貌似问题也不大。(而其编译器都没有任何的warning!!!,但是不得不提一句,在C里面你要是想做这样的事情恐怕就是不罩的因为所谓要求右值是常量的限制 ),在网上搜索了一下看到了一些的论述,大致的意思和书中类似,比如下面这个URL  http://stevewetherill.com/2008/10/25/c-static-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值