再看单例模式

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;
    }
}

posted @ 2013-10-02 21:20  helloweworld  阅读(159)  评论(0编辑  收藏  举报