C++ 单例模式实现详解:代码示例及解释

单例模式是一种常用的设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取该实例。单例模式在很多场景下都有应用,例如数据库连接、日志记录、配置管理等等。

代码示例:

#include <iostream>

class Single {
public:
    static Single* getInstance() { // 返回单例对象的方法
        if (instance == nullptr) { // 如果单例对象为空
            instance = new Single(); // 创建一个新的单例对象
        }
        return instance; // 返回单例对象
    }

    void destroyInstance() { // 销毁单例对象的方法
        if (instance != nullptr) { // 如果单例对象不为空
            delete instance; // 删除单例对象
            instance = nullptr; // 将单例对象指针置为空
        }
    }

private:
    Single() {} // 私有的构造函数,防止外部直接创建对象
    ~Single() {} // 私有的析构函数,防止外部直接销毁对象

    static Single* instance; // 静态成员变量,用于保存单例对象的指针
};

Single* Single::instance = nullptr; // 静态成员变量初始化为nullptr

int main() {
    Single* p = Single::getInstance(); // 创建一个单例对象
    p = Single::getInstance(); // 再次调用获取单例对象的方法,返回之前创建的对象
    p->destroyInstance(); // 销毁单例对象
    return 0;
}

代码解释:

  • #include <iostream>: 导入标准输入输出库,用于输出信息。

  • class Single: 定义一个名为 Single 的类,用于实现单例模式。

  • public:: 声明公共成员函数,这些函数可以被外部访问。

    • static Single* getInstance(): 该函数返回单例对象的指针。如果 instance 指针为空,则创建一个新的 Single 对象,并将指针赋值给 instance。否则,直接返回 instance 指针。
    • void destroyInstance(): 该函数销毁单例对象。如果 instance 指针不为空,则删除 instance 对象并将其置为空。
  • private:: 声明私有成员函数和成员变量,这些成员只能在类内部访问。

    • Single(): 私有的构造函数,防止外部直接创建 Single 对象。
    • ~Single(): 私有的析构函数,防止外部直接销毁 Single 对象。
    • static Single* instance: 静态成员变量,用于保存单例对象的指针。由于是静态成员变量,所以它只存在一份,并且所有 Single 对象共享这个变量。
  • Single* Single::instance = nullptr: 初始化静态成员变量 instance 为空指针。

  • main() 函数: 主函数,用于测试单例模式的实现。

    • Single* p = Single::getInstance(): 调用 getInstance() 函数获取单例对象的指针。
    • p = Single::getInstance(): 再次调用 getInstance() 函数,确保返回的是同一个对象指针。
    • p->destroyInstance(): 调用 destroyInstance() 函数销毁单例对象。

总结:

通过上述代码和解释,我们可以了解到,单例模式的核心是使用一个私有的构造函数和一个静态的成员变量来确保只有一个实例。通过 getInstance() 函数可以获取该实例,并通过 destroyInstance() 函数销毁该实例。

单例模式的优势:

  • 保证一个类只有一个实例: 这在一些场景下非常重要,例如数据库连接,如果有多个实例,可能会导致冲突或资源浪费。
  • 提供一个全局访问点: 通过 getInstance() 函数,可以方便地获取唯一的实例。

单例模式的应用场景:

  • 数据库连接: 保证只有一个数据库连接,以避免冲突或资源浪费。
  • 日志记录: 保证所有模块都使用同一个日志记录器,方便集中管理日志信息。
  • 配置管理: 保证所有模块都使用相同的配置信息,避免配置冲突。

希望本文能够帮助你理解 C++ 单例模式的实现原理以及应用场景。

C++ 单例模式实现详解:代码示例及解释

原文地址: https://www.cveoy.top/t/topic/qwsy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录