64,637
社区成员
发帖
与我相关
我的任务
分享
class Signals:public QObject
{
Q_OBJECT
private:
static Signals* obj;
Signals();//忘记delete拷贝、赋值构造了
public:
static Signals* getObj()
{
if(obj == nullptr)//obj必然被初始化为null了的
obj = new Signals();
return obj;
}
}
static Signals* getObj()
{
static Signals s_instance;
return &s_instance;
}
另外,个人非常不喜仅为了某个功能就去用继承(个人喜好)。 所以我不会建议用继承。 这种情况,可以用宏定义:
#define IMPLEMENT_SINGLETON(ClassName) \
public: \
static ClassName* getObj() { \
static ClassName s_instance; \
return &s_instance; \
}
使用:
class Signals
{
IMPLEMENT_SINGLETON(Signals)
private:
Signals(){}
~Signals(){}
};
#include<iostream>
using namespace std;
template <class T>
class TEST:T
{
private:
static TEST* obj;
public:
static T* getObj()
{
if(obj==nullptr)
obj = new TEST();
return obj;
}
};
template<typename T>
TEST<T>* TEST<T>::obj;
class TEST2
{
protected:
int x;
protected:
TEST2() {}
};
int main() {
TEST2* P= TEST<TEST2>::getObj();
return 0;
}
template <class T>
class TEST
{
private:
static T* obj;
public:
static T* getObj()
{
if(obj == nullptr)
obj = new T();//但这里翻车了,下面的TEST2的构造函数必然要private。这里便访问不到了
return obj;
}
};
class TEST2:TEST<TEST2>
{
//我想上面写一个这样的模板。然后后面那些单例都可以像这样:TEST2* obj = TEST<TEST2>::getobj();设想的很美好
};