单例模式的实现与应用

单例模式是一种常用的设计模式,它确保一个类只有一个实例,并提供一个全局访问点。这种模式在需要控制资源访问、保证资源唯一性时非常有用。例如,数据库连接、配置文件读取等场景中,单例模式可以确保资源的高效利用和避免重复创建实例带来的开销。

单例模式的实现通常涉及到私有化构造函数和析构函数,以及一个静态方法来获取类的实例。在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); }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485