天天看点

c++单例和静态的区别

本文章属于个人见解,如果牛人认为不妥请多多指教,谢谢

很多人刚开始接触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++老师了。

继续阅读