单例模式是一种常用的设计模式,它确保一个类只有一个实例,并提供一个全局访问点。这种模式在需要控制资源访问、保证资源唯一性时非常有用。例如,数据库连接、配置文件读取等场景中,单例模式可以确保资源的高效利用和避免重复创建实例带来的开销。
单例模式的实现通常涉及到私有化构造函数和析构函数,以及一个静态方法来获取类的实例。在C++中,单例模式可以通过多种方式实现,包括使用静态局部变量、懒汉式初始化等。
本文将介绍一种实现单例模式的方法,该方法具有以下优点:
下面是一个简单的单例助手类CSingletonT<>的实现,它可以帮助更容易地实现单例模式:
// SingletonT.h
template<typename T>
class CSingletonT {
private:
static T* m_pInstance;
public:
static T* GetObject() {
if (m_pInstance == nullptr) {
m_pInstance = new T();
}
return m_pInstance;
}
};
template<typename T>
T* CSingletonT<T>::m_pInstance = nullptr;
接下来,定义一个测试类CObj,并使用CSingletonT来实现单例模式:
// Obj.h
class CObj {
protected:
CObj() { x = 0; TRACE("Created CObj\r\n"); }
public:
virtual ~CObj() { x = 0; TRACE("Deleted CObj\r\n"); }
int x;
};
// TestSingleTDlg.cpp
void CTestSingleTDlg::OnButton1() {
// 如果是第一次调用,则会实例化单例对象(延迟实例化)
CObj* o = CSingletonT<CObj>::GetObject();
// 使用单例对象
o->x++;
TRACE("o->x = %d\r\n", o->x);
}