Michael's

focus on architecture & hi-performance

今天你单例(singleton)了吗?

我们通常见到的单例模式(singleton)是这样的
using System;
using System.Text;

namespace Michael-_-Young
{
    
class Singleton
    
{
        
private static Singleton _obj;
        
private Singleton
        
{
        
//do something 
        }

        
        
public static Singleton Instance()
        
{
            
if(null==_obj)
                _obj 
= new Singleton();
            
return _obj;
        }

        
        
//.
    }

}

很明显,我们对这样的用法深信无疑,但偏偏问题就出在这个static object身上。

场景一:
我们用这样的语句行
Singleton _single = Singleton.Instance();
来得到Singleton的一个对象,当调用完毕之后,需要销毁_single对象,如果在Singleton类内部定义了如下的方法
public static void DisposeSingleton()
{
    
if(null!=_obj)
        _obj
=null;
}
我们是不是通过调用该DisposeSingleton方法将_single对象销毁呢?
答案是:错!

我这两天在维护以前的项目时(调用dll),有用到以上的语句行,还以为就能轻易将_single对象销毁,等到调试时才发现函数重入问题,头疼不已。我当时的考虑是,既然我都已经通过调用DisposeSingleton方法将内部的_obj指向空内存了,那么_single也应该是指向空内存了阿
实际的情况是:你永远不要指望该_single对象用这种方式得到销毁。还是自己动手比较好
_single = null;

posted on 2006-08-27 19:45 m.s 阅读(677) 评论(7) 编辑 收藏

导航

统计信息

News