单例模式(大话设计模式)C/C++版本

单例模式

C++

饿汉

cpp 复制代码
/* HM hungry man 饿汉 */
#include <iostream>
using namespace std;
class Singleton
{
private:
    Singleton() { cout << "单例对象创建!" << endl; };
    Singleton(const Singleton &);
    Singleton &operator=(const Singleton &);
    ~Singleton() { cout << "单例对象销毁!" << endl; };

    static Singleton *myInstance;

public:
    static Singleton *getInstance()
    {
        return myInstance;
    }
    static void releaseInstance()
    {
        delete myInstance;
    }
};

Singleton *Singleton::myInstance = new Singleton();
int main()
{
    Singleton *ct1 = Singleton::getInstance();
    Singleton *ct2 = Singleton::getInstance();
    Singleton *ct3 = Singleton::getInstance();
    Singleton::releaseInstance();
    return 0;
}

懒汉

cpp 复制代码
/* LM lazy man 懒汉 */
#include <iostream>
using namespace std;
class Singleton
{
private:
    Singleton() { cout << "单例对象创建!" << endl; };
    Singleton(const Singleton &);
    Singleton &operator=(const Singleton &);
    ~Singleton() { cout << "单例对象销毁!" << endl; };

public:
    static Singleton *getInstance()
    {
        static Singleton myInstance;
        return &myInstance;
    }
};

int main()
{
    Singleton *ct1 = Singleton::getInstance();
    Singleton *ct2 = Singleton::getInstance();
    Singleton *ct3 = Singleton::getInstance();
    return 0;
}

C

饿汉

c 复制代码
/* HM hungry man 饿汉 */
#include <stdio.h>

// 定义单例结构体
typedef struct
{
    int initialized;
} Singleton;

// 静态全局变量,初始化单例对象
static Singleton singleton = {1};

// 单例对象的访问函数
Singleton *getSingleton(void)
{
    static Singleton *ptr = &singleton; // 静态局部变量,初始化单例对象指针
    return ptr;
}

int main()
{
    Singleton *ct1 = getSingleton();
    Singleton *ct2 = getSingleton();
    Singleton *ct3 = getSingleton();

    // 注意:在C语言中,单例对象的生命周期通常与程序相同,
    // 不需要显式释放,因为程序结束时资源会自动释放。
    // 但是,如果单例对象持有需要释放的资源,应该在适当的地方释放。

    return 0;
}

懒汉

c 复制代码
/* LM lazy man 懒汉 */
#include <stdio.h>

typedef struct
{
    int initialized;
} Singleton;

static Singleton *getSingleton(void)
{
    static Singleton instance = {0}; // 静态局部变量,只初始化一次
    static Singleton *ptr = NULL;    // 静态局部指针,用于返回单例对象

    if (ptr == NULL)
    {
        ptr = &instance;          // 第一次调用时初始化指针
        instance.initialized = 1; // 标记单例对象已初始化
        printf("单例对象创建!\n");
    }

    return ptr;
}

int main()
{
    Singleton *ct1 = getSingleton();
    Singleton *ct2 = getSingleton();
    Singleton *ct3 = getSingleton();

    // 如果需要显示单例对象的生命周期结束,可以在这里释放资源或做一些清理工作
    // 但请注意,C语言中单例对象的销毁通常是在程序结束时自动发生的

    return 0;
}
相关推荐
SundayBear24 分钟前
嵌入式进阶:C语言内联汇编
c语言·开发语言·汇编
庸了个白1 小时前
一种面向 AIoT 定制化场景的服务架构设计方案
mqtt·设计模式·系统架构·aiot·物联网平台·动态配置·解耦设计
小龙报3 小时前
《算法通关指南---C++编程篇(2)》
c语言·开发语言·数据结构·c++·程序人生·算法·学习方法
Meteors.5 小时前
23种设计模式——访问者模式 (Visitor Pattern)
设计模式·访问者模式
C++ 老炮儿的技术栈5 小时前
include″″与includ<>的区别
c语言·开发语言·c++·算法·visual studio
Vallelonga5 小时前
Rust 设计模式 Marker Trait + Blanket Implementation
开发语言·设计模式·rust
en-route6 小时前
设计模式的底层原理——解耦
设计模式
杯莫停丶6 小时前
设计模式之:工厂方法模式
设计模式·工厂方法模式
Deschen6 小时前
设计模式-抽象工厂模式
java·设计模式·抽象工厂模式
小龙报6 小时前
《彻底理解C语言指针全攻略(6)-- qsort、sizeof和strlen》
c语言·开发语言·职场和发展·创业创新·学习方法·业界资讯·visual studio