再看单例模式
C++版本:
class Singleton
{
public:
static Singleton& getInstance()
{
return instance;
}
private:
Singleton(){};
Singleton(const Singleton&);
Singleton& operator=(const Singleton&);
static Singleton instance;
};
Singleton Singleton::instance;
{
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;
}
}
private Singleton() {};
private static Singleton instance = new Singleton();
public static Singleton createInstance() {
return instance;
}
}