0

我想创建一个类,它将提供静态方法来创建唯一的处理程序(可能是 int,可能是浮动的,可能是一些东西,但总是作为指向对象的指针被检索),但我在考虑时仍然有点困惑,当我开始阅读有关单例和工厂模式的信息,然后我完全感到困惑。

假设我有一堂课

CHandle{
private:
        CHandle(const CHandle &hnd);
        CHandle &operator=(const CHandle &hnd);
        static int id;
public:
        static CHandle *createHandle(){
            id++;
            return this;
        }
}

在主要我会使用:

CHandle *c = CHandle::createHandle();

我可以那样做吗?或者我把一切都搞砸了?

4

3 回答 3

3

有两件事:

  • static一种方法对this. 所以没有this内部static方法。
  • 之后您可以执行以下操作:

    CHandle{
    
    public:
            static CHandle *createHandle(){ 
                s_id++;
                return new CHandle(s_id);
            }
    private:
            CHandle(int id) :
                m_id(id)
            {};
    
            CHandle(const CHandle &hnd);
            CHandle &operator=(const CHandle &hnd);
    
            int m_id;         // Id of the instance
            static int s_id;
    
    };
    

如果你想要它作为一个单例

CHandle{

public:
    static CHandle *createHandle(){
        if ( !s_Instance )
        {
            s_id++;
            s_Instance = new CHandle(s_id);
        }
        return s_Instance;
    }
private:
    CHandle(int id) :
        m_id(id)
    {};

    CHandle(const CHandle &hnd);
    CHandle &operator=(const CHandle &hnd);

    int m_id;         // Id of the instance
    static int s_id;
    static CHandle s_Instance;

};

不要忘记在 .cpp 中:

int CHandle::s_id = 0;
CHandle* CHandle::s_Instance = NULL; // if singleton
于 2013-08-05T11:05:12.827 回答
0

永远记住,这this是与对象相关的,但static适用于整个类,因此static方法无法访问this
这是您需要的帮助

CHandle{
private:
        CHandle(const CHandle &hnd);
        CHandle(int iidd);
        CHandle &operator=(const CHandle &hnd);
        static int id;
        static CHandle *obj;//Singleton object
public:
        static CHandle *createHandle(){
            id++;
            return obj;
        }

}

在 Project.cpp

int CHandle::id=0;
CHandle *CHandle::obj=new CHandle(xxx);
于 2013-08-05T11:28:41.927 回答
0
CHandle{
private:
        CHandle(int id): m_id(id) {};
        CHandle(const CHandle &hnd);
        CHandle &operator=(const CHandle &hnd);
        int m_id;
        static int s_id;
public:
        static CHandle *createHandle(){
            s_id++;
            return new CHandle(s_id);
        }
}
于 2013-08-05T10:59:35.067 回答