C++ C+中的唯一处理程序+;

C++ C+中的唯一处理程序+;,c++,C++,我想创建一个类,它将提供静态方法来创建唯一的处理程序(可能是int,可能是float,可能是某种东西,但总是作为指向对象的指针进行检索),但我仍然有点困惑,当我开始阅读单例和工厂模式时,我一点也不明白 假设我有一节课 CHandle{ private: CHandle(const CHandle &hnd); CHandle &operator=(const CHandle &hnd); static int id; pub

我想创建一个类,它将提供静态方法来创建唯一的处理程序(可能是int,可能是float,可能是某种东西,但总是作为指向对象的指针进行检索),但我仍然有点困惑,当我开始阅读单例和工厂模式时,我一点也不明白

假设我有一节课

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();
我可以这样做吗?或者我把一切都搞砸了?

有两件事:

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);
        }
}
  • 首先,
    静态
    方法不知道
    这个
    。所以在
    静态方法中没有
    这个
  • 之后,您可以执行以下操作:

    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;
    
    };
    
如果你想成为单身汉:

不要忘记在.cpp中:

int CHandle::s_id = 0;
CHandle* CHandle::s_Instance = NULL; // if singleton
有两件事:

  • 首先,
    静态
    方法不知道
    这个
    。所以在
    静态方法中没有
    这个
  • 之后,您可以执行以下操作:

    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;
    
    };
    
如果你想成为单身汉:

不要忘记在.cpp中:

int CHandle::s_id = 0;
CHandle* CHandle::s_Instance = NULL; // if singleton

请始终记住,
与对象相关,但
静态
用于整个类, 因此,
静态
方法无法访问

这是你需要的帮助

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

请始终记住,
与对象相关,但
静态
用于整个类, 因此,
静态
方法无法访问

这是你需要的帮助

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

静态方法不知道
这个
你也可以使用搜索选项:noooooooooooooooooooooooo!不要用单身汉,他们是邪恶的!有更好的方法可以做到这一点。构造函数和模板。为什么要这样做,或者更确切地说,您想解决什么问题?我想有一种机制,它可以包装不同的数据类型(如int、struct或其他),并将返回指向新的唯一对象的指针-就像每次调用方法createHanlde()时,都将返回指向具有唯一id的对象的新的唯一指针。这就是为什么我想到了单例方法和工厂方法,但后来有人告诉我,我可以使用带计数器的静态方法。但是现在我在想谁会破坏这些对象呢?静态方法不知道这个
,你也可以使用搜索选项:noooooooo!不要用单身汉,他们是邪恶的!有更好的方法可以做到这一点。构造函数和模板。为什么要这样做,或者更确切地说,您想解决什么问题?我想有一种机制,它可以包装不同的数据类型(如int、struct或其他),并将返回指向新的唯一对象的指针-就像每次调用方法createHanlde()时,都将返回指向具有唯一id的对象的新的唯一指针。这就是为什么我想到了单例方法和工厂方法,但后来有人告诉我,我可以使用带计数器的静态方法。但现在我在想谁会毁掉这些东西?