设计模式里面的单件模式之疑问。
写了个单件模式的简单例子,看了之后发现和标准的实现方式有很大区别,
请大家看看我这样写到底会有多少问题。我自己测试能简单用。
class SingletonA{public: static SingletonA& Instance() { static SingletonA a; return a; } void aFun() { cout<<"SingletonA aFun"<<endl; } void Set(int i) { i_ = i; } void Get() { cout<<"i="<<i_<<endl; }private: SingletonA() { } SingletonA(const SingletonA& rhs) { } ~SingletonA() { } SingletonA& operator=(const SingletonA &rhs) { return *this; } int i_;};int _tmain(int argc, _TCHAR* argv[]){ SingletonA::Instance().aFun(); SingletonA::Instance().Set(10); SingletonA::Instance().Get(); return 0;}
class Singleton{public: static Singleton *getInstance() // 一个静态公有的getInstance函数 { if( !m_pInstatnce) m_pInstance = new Singleton; return m_pInstance; }private: static Singleton *m_pInstatnce; // 实例变量是静态私有的private: // 构造函数是私有的 Singleton(); Singleton(const Singleton&); Singleton& operator=(const Singleton&); ~Singleton(); }
[解决办法]
static SingletonA& Instance()
{
static SingletonA a;
return a;
}
这个还是返回指针比较好:
static SingletonA* Instance()
{
static SingletonA a;
return &a;
}
[解决办法]
正如《Modern C++ design》所说, 这个世界上没有完美的单件(通用),只有在特定情况下最佳的实现。
[解决办法]
我的仅供参考
[code=C/C++][/code]
class Singleton
{
public :
static Singleton* Instance ( );
protected :
Singleton(){} //必须要有实现,会调用它,否则出错
private :
static Singleton *_instance ;
};
Singleton* Singleton::_instance = 0;
Singleton* Singleton::Instance ( )
{
if(_instance == 0)
{
_instance = new Singleton;
}
return (_instance);
}
int main(void)
{
Singleton *p1=Singleton::Instance();
Singleton *p2=Singleton::Instance();
getchar();
return 0;
}//注意最后的delete