虽然这个话题有很多答案,但我仍然有一个问题。
和大家一样,我想实现一个单例模式。我试过这个:
class Factory
{
private:
Factory(void);
static Factory* self_inst;
public:
~Factory(void);
IPortIO* getStrategy(int portType);
static Factory *getInstance()
{
if(self_inst == NULL)
self_inst = new Factory();
return self_inst;
}
};
当我在getInstance()静态方法中调用 *self_inst* 时,问题就来了。很多人说,使用静态变量时,不能只声明,还要在别处定义。好吧,我在尝试在非常地方定义它时遇到了问题:
1 课外:
Factory* Factory::self_inst;
2 类外,带值:
Factory* Factory::self_inst=NULL;
3 在静态方法内部:
static Factory *getInstance()
{
Factory* Factory::self_inst;
if(self_inst == NULL)
self_inst = new Factory();
return self_inst;
}
4 并在静态方法内部但具有值:
static Factory *getInstance()
{
Factory* Factory::self_inst=NULL;
if(self_inst == NULL)
self_inst = new Factory();
return self_inst;
}
没有任何作用!最后我决定不在类中创建静态属性,而是在静态方法中创建静态变量。这行得通,但它绝对不一样,也不是一个好的编程习惯,因为如果我需要使用两个静态方法访问同一个变量,我该怎么办?这不是我的情况,但这是一个很好的问题,我真的很想知道是否有人知道这样做很热。