再看单例模式

C++版本:

class   Singleton
{
public :
    static   Singleton &   getInstance()
    {
        return   instance;
    }
private :
    Singleton() { } ;
    Singleton( const   Singleton & );
    Singleton &   operator = ( const   Singleton & );

    static   Singleton   instance;
} ;
Singleton   Singleton : : instance;

注意:

1.getInstance返回的是引用,如果不是引用则调用了一次拷贝构造,产生临时对象。

2.拷贝构造和赋值运算符要私有化,否则有可能产生新的对象。

如不对拷贝构造私有化执行下面语句

Singleton s1 = Singleton::getInstance();

这里调用拷贝构造产生了新的对象s1,虽然s1是对static instance的浅拷贝,但这不符合单例的特征。

3.注意对static instance的定义性说明。

 

java版本:

class   Singleton   {
   
    private   Singleton()   { } ;
    private   static   Singleton   instance   =   new   Singleton();
   
    public   static   Singleton   createInstance()   {
        return   instance;
    }
}

你可能感兴趣的:(单例模式)