C++ 单例模式Singleton+自动释放单实例-多版本

本文介绍了三种C++实现单例模式的方法:版本1结合pthread_once确保多线程环境下的安全性和atexit进行自动释放;版本2通过饱汉模式和静态嵌套类实现在程序结束时自动销毁单例;版本3则利用atexit函数在程序退出后执行回调以销毁单例。
摘要由CSDN通过智能技术生成

版本1:
pthread_once 保证多线程环境下懒汉单例模式安全
atexit 注册程序结束时的销毁函数,自动销毁单实例

int pthread_once(pthread_once_t * once_control , void(* init_routine)(void)); 
1.其中pthread_once_t once_control = PTHREAD_ONCE_INIT;
2.init_routine是函数指针 
3.使用相同的once_control的pthread_once() 的后续调用不能调用init_routine
4.成功返回0  失败返回 error number

int atexit(void (*function)(void))
1.成功返回0  失败返回 error number
2.可以重复调用
#include <stdlib.h>
#include <pthread.h>
#include <iostream>
using std::cout;
using std::endl;
class Singleton
{
public:
    static Singleton * getInstance()
    {
        pthread_once(&_once_control, init_routine);     //静态成员函数只能使用静态成员,故_once_control、init_routine函数指针为static
        return _pInstance;
    }

    static void init_routine()     //多线程环境仍然能保证仅执行一次 ->  创建单实例对象+注册atexit函数
    {
        _pInstance = new Singleton; 
        atexit(destroy);          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值