当前位置: 首页 > news >正文

单例模式下的自动内存释放和模板

文章目录

  • 前言
  • 一.使用atexit释放内存
  • 二.使用模板


前言

在单例模式中,由于没有自动调用类的析构机制,导致无法内存释放,本文将介绍两种自动释放的方法

一.使用atexit释放内存

atexit是C++标准库中的一个函数,用于在程序退出时执行一些清理工作。它的工作原理是,当程序正常退出(例如,通过调用exit函数或接收到一个信号)时,atexit会按照注册的顺序执行这些清理工作。

class SingleClass {
public:static SingleClass& GetInstance() {if (instance_ == nullptr) {std::once_flag flag;std::call_once(flag, [&]() {instance_= new SingleClass;atexit([]() {delete instance_;});});}return *instance_;}private:SingleClass() { cout << "create" << endl; };~SingleClass() { cout << "destorted" << endl;};SingleClass& operator=(const SingleClass&) = delete;SingleClass(const SingleClass&) = delete;SingleClass(SingleClass&&) = delete;SingleClass& operator=(SingleClass&&) = delete;static SingleClass* instance_;};
SingleClass* SingleClass::instance_=nullptr ;

二.使用模板

在C++11中,静态变量是线程安全的

template<typename T>
class Singleton {
public:static T & GetInstance() {static T instance; return instance;}
protected:virtual ~Singleton() {}Singleton() {} 
private:Singleton(const Singleton&) = delete; Singleton& operator=(const Singleton&) =delete;Singleton(Singleton&&) = delete;Singleton& operator=(Singleton&&) =delete;
};
class DesignPattern : publicSingleton<DesignPattern> {friend class Singleton<DesignPattern>; 
private:DesignPattern() {}~DesignPattern() {}
};

http://www.mrgr.cn/news/1811.html

相关文章:

  • 国际校企合作|深信服、常州信息职业技术学院、马来西亚汽车工业大学三方国际化人才培养合作签约仪式圆满成功
  • 后端开发刷题 | 寻找峰值【二分法】
  • 第N7周:调用Gensim库训练Word2Vec模型
  • 08结构型设计模式——适配器模式
  • 证书|“机器学习工程师”来了,由工业和信息化部教育与考试中心颁发,含金量高
  • 1.微服务发展阶段
  • 【Android】Android AOP 编程框架
  • ActiveMQ、RabbitMQ、Kafka、RocketMQ在优先级队列、延迟队列、死信队列、重试队列、消费模式、广播模式的区别
  • CentOS主机名修改
  • 【区块链+金融服务】供应链金融平台 | FISCO BCOS应用案例
  • 动态规划-下降路径最小和
  • Chromium编译指南2024 - Android篇:从Linux版切换到Android版(六)
  • Vite 与 Vue:分开的发展路径
  • [000-01-030].Zookeeper学习大纲
  • 自定义组件上传到maven中央仓库2024实测可用最详细版
  • ES 聚合查询
  • 【GH】【EXCEL】P1: Write DATA SET from GH into EXCEL
  • Linux第九节课 - git / gdb
  • Axios使用
  • jmeter引入jar包的三种方式