本文章属于个人见解,如果牛人认为不妥请多多指教,谢谢
很多人刚开始接触c++的时候,认为单例和静态怎么用途都一样呢?
原因是他没有真正的见到单例和静态的使用不同。
我来给出一个简单的判断使用选择:
1.如果这个类仅仅是一个工具类也就是说没有什么成员变量(或成员变量也是通用的)。建议使用静态
2.如果这个类是一个全局只用一次的逻辑处理类也就是说没逻辑处理,往往外面需要调用里面的属性。建议使用单例
下面我给出单例的定义方法:
在项目中添加头文件,每个单例类都要包含
//通用的头文件
// 宏定义一个类实现单例需要做的一些工作。
// 每个单例类最好将其构造函数和虚析构函数设置为private
#pragma once
#define SINGLETON_DECLARE(theclass) \
public: \
static theclass * SnglPtr(); \
static void FreeSingleton(); \
private: \
static theclass * m_s##theclass; \
#define SINGLETON_IMPLEMENT(theclass) \
theclass * theclass::m_s##theclass = NULL; \
theclass * theclass::SnglPtr() \
{ \
if (NULL == m_s##theclass) \
{ \
m_s##theclass = new(std::nothrow) theclass; \
} \
return m_s##theclass; \
} \
void theclass::FreeSingleton() \
{ \
if (NULL != m_s##theclass) \
{ \
delete m_s##theclass; \
m_s##theclass = NULL; \
} \
} \
//
上面的是的定义的宏
使用方法就是在类的h文件中类里面使用
SINGLETON_DECLARE(theclass)
在cpp文件中使用(而不是在什么函数中)
SINGLETON_IMPLEMENT(theclass)
我记得#pragma once在GCC中不能用这是在vc中可以用的
调用单例就是theclass::SnglPtr->成员方法(成员变量)
静态类我就不多说了,就只有问一问你们的c++老师了。