单例模式(大话设计模式)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;
}
相关推荐
Navigator_Z11 小时前
LeetCode //C - 1288. Remove Covered Intervals
c语言·算法·leetcode
铅笔小新z13 小时前
【C语言】深入理解指针
c语言·开发语言
范中勤18 小时前
技术文档:模型工厂 `llm_provider` / `llm_use` 分层设计
设计模式·langchain·架构设计·模型工厂·llm_provider
Aurorar0rua19 小时前
CS50 x 2024 Notes Data structures - 08
c语言·开发语言·学习方法
小米里的大麦20 小时前
19 C、C++ 操作 MySQL
c语言·c++·mysql
Logic10120 小时前
C语言/数据结构位运算题解:异或XOR找出套碗游戏中的“幸运碗“——只出现一次的数字
c语言·数据结构·算法·数组·位运算·时间复杂度·空间复杂度
番茄灭世神20 小时前
PN学堂GD32教程第12篇——SPI与Nor Flash
c语言·stm32·单片机·嵌入式·gd32·总线协议
苏辰澈21 小时前
C++独属于自己的变身:多态
c语言·开发语言·c++·visualstudio·编辑器
水饺编程21 小时前
第1章,[Win32 章节]:在 VS2019 里面安装 MSDN
c语言·c++·windows·visual studio
浅尝辄止;21 小时前
设计模式在HIS/LIS医疗系统中的完整实践指南(C#版)
开发语言·设计模式·c#