C++学习随笔——简单的单例设计模式实例

点击查看代码
#include <iostream>

class Singleton {
private:
    // 私有化构造函数,防止外部实例化
    Singleton() {
        std::cout << "Singleton Instance Created!" << std::endl;
    }

    // 删除拷贝构造函数和赋值运算符,防止拷贝实例
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

public:
    // 提供一个全局访问点,返回唯一实例
    static Singleton& getInstance() {
        static Singleton instance;  // 静态局部变量,第一次调用时创建实例
        return instance;
    }

    void showMessage() {
        std::cout << "Hello from Singleton!" << std::endl;
    }
};

int main() {
    // 获取Singleton的唯一实例并调用方法
    Singleton& singleton1 = Singleton::getInstance();
    singleton1.showMessage();

    // 再次获取实例
    Singleton& singleton2 = Singleton::getInstance();

    // 检查两个实例是否相同
    if (&singleton1 == &singleton2) {
        std::cout << "singleton1 and singleton2 are the same instance." << std::endl;
    } else {
        std::cout << "singleton1 and singleton2 are different instances." << std::endl;
    }

    return 0;
}

单例设计模式与我之前学习的C++代码都有所不同:
1、为了防止外部随意实例化对象,类的构造函数和析构函数采用了private访问修饰符。
2、getInstance()方法中的静态局部变量instance在第一次调用时创建,并在程序的生命周期中存在。(C++11及以后的标准中保证线程安全的懒汉式单例模式
3、删除了拷贝构造函数和operator=,防止用户意外调用拷贝构造函数创造新的实例。

posted @   北宸于烁  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示