1

虽然这个话题有很多答案,但我仍然有一个问题。

和大家一样,我想实现一个单例模式。我试过这个:

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

没有任何作用!最后我决定不在类中创建静态属性,而是在静态方法中创建静态变量。这行得通,但它绝对不一样,也不是一个好的编程习惯,因为如果我需要使用两个静态方法访问同一个变量,我该怎么办?这不是我的情况,但这是一个很好的问题,我真的很想知道是否有人知道这样做很热。

4

1 回答 1

1

数字 2 是对的(实际上数字 1 也是如此,因为默认初始化为 NULL),只需记住将其放在 cpp 文件中,而不是在标题中。

如果它仍然无法正常工作,请发布错误消息。

于 2013-05-06T09:33:55.080 回答