标签:
项目中使用了不少单例模式,必须承认,当初使用时仅仅考虑到了单例模式使用时的便利性,当然也考虑了这些类没必要有多个实例,但是仍隐约感觉到可能存在问题,只不过现在没有发现,先转载两篇文章,mark下,等出现问题了再细细分析下:
http://topkung.blog.163.com/blog/static/105268043200923192912579/
http://www.nowamagic.net/program/program_DoNotAbuseSingleTon.php
总结下:
1. 隐式依赖引起的结构不清晰
C++头文件中不会看到B类对单例A类的依赖。
2. 单例类的扩展限制
3. 程序结束时的内存泄漏
C++程序员门要考虑,java就不管了哈。单例模式delete释放内存的风险在于,你不知道delete后有没有再GetInstance,并且因为对象不是成员变量,所以你可能会忘记delete它。贴段代码mark下:
class CSingleton: { // 其它成员 public: static CSingleton * GetInstance(){。。。} private: CSingleton(){}; static CSingleton * m_pInstance; class CGarbo // 它的唯一工作就是在析构函数中删除CSingleton的实例 { public: ~CGarbo() { if (CSingleton::m_pInstance) delete CSingleton::m_pInstance; } }; static CGarbo Garbo; // 定义一个静态成员,在程序结束时,系统会调用它的析构函数 }
程序在结束的时候,系统会自动析构所有的全局变量。事实上,系统也会析构所有的类的静态成员变量,就像这些静态成员也是全局变量一样。系统会调用CSingleton的静态成员Garbo的析构函数,该析构函数会删除单例的唯一实例。
标签:
原文地址:http://www.cnblogs.com/android-devil/p/4589453.html