C++学习—单例模式

这篇具有很好参考价值的文章主要介绍了C++学习—单例模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C++学习—单例模式,C++基础,c++,学习,单例模式,学习笔记

目录

​编辑

一,单例模式介绍

二,单例模式下的两种模式

 1,饿汉模式

2,懒汉模式


 

一,单例模式介绍

单例:在全局只有一份实例。

单例模式是编程的经典模式之一。

二,单例模式下的两种模式

 1,饿汉模式

饿汉模式:在main函数启动前就先把实例化的类对象准备好。

1,提前准备好实例化对象:要使用全局变量。 

2,保证全局只有一个实例化对象:要将构造函数,拷贝构造函数,赋值重载函数私有化防止类外面访问。

3,一个对象要是全局的又要能访问类里面的私有化方法:要在类里面声明一个static对象,在类外面定义。

代码示例:

class Singleton
{

public:

	static Singleton*Get()//定义一个函数来调用这个对象。
	{
		return &member;
	}

	void change(int x)//改变成员_a值的函数
	{
		member._a = x;
	}

	int val()//返回一个成员_a值
	{
		return member._a;
	}


private:

	//构造函数私有化,赋值重载禁用
	Singleton() {};
	Singleton(const Singleton& aa)=delete;
	Singleton& operator=(Singleton) = delete;

	int _a = 0;
	static Singleton member;//在类里面声明一个static成员。
};

Singleton Singleton::member;//类外定义

以上的饿汉模式的代码示例,现在来讲一讲饿汉模式的优缺点:

优点:1,设计简单。

缺点:1,会导致程序启动慢 2,当单例模式的类实例有顺序时,顺序不可控

2,懒汉模式

 懒汉模式:第一次使用时再创建。并且要解决饿汉模式的缺点。

1,提前准备好实例化对象:要使用全局变量。但是又要改掉饿汉模式下的启动慢的问题,所以要将饿汉模式下的全局对象改成一个全局指针。 

2,保证全局只有一个实例化对象:要将构造函数,拷贝构造函数,赋值重载函数私有化防止类外面访问。

3,一个对象要是全局的又要能访问类里面的私有化方法:要在类里面声明一个static指针,在类外面定义。

 示例代码:

class Singleton2
{

public:

	static Singleton2* Get()//定义一个函数来调用这个对象
	{
		if (member2 == nullptr) return member2 = new Singleton2;//第一次使用时创建
		else return member2;
	}

	void change(int x)//改变成员_a值的函数
	{
		member2->_a = x;
	}

	int val()//返回一个成员_a值
	{
		return member2->_a;
	}


private:

	//构造函数私有化,赋值重载禁用
	Singleton2() {};
	Singleton2(const Singleton& aa) = delete;
	Singleton2& operator=(Singleton) = delete;

	int _a = 0;
	static Singleton2* member2 ;//在类里面声明一个static成员。
};

Singleton2* Singleton2::member2 = nullptr;//类外定义初始化为nullptr

以上便是懒汉模式的示例代码。懒汉模式的优缺点如下:

优点:

1,解决了饿汉模式的缺点。

缺点:

1,具有线程安全的问题。(这个我还不太懂,以后补充)。文章来源地址https://www.toymoban.com/news/detail-826878.html

到了这里,关于C++学习—单例模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JUC并发编程学习笔记(十七)彻底玩转单例模式

    单例中最重要的思想-------构造器私有! 恶汉式、懒汉式(DCL懒汉式!) 恶汉式 懒汉式 DCL懒汉式 完整的双重检测锁模式的单例、懒汉式、DCL懒汉式 但是有反射!只要有反射,任何的代码都不安全,任何的私有都是摆设 正常的单例模式: 反射破坏单例: 怎么去解决这

    2024年02月05日
    浏览(44)
  • 【c/c++】C++静态工具类和单例模式对比学习

    序言 比较C++ static(伪)静态(工具)类和单例模式的异同,方便工作中正确选用实现方式 说明:Java/C#等高级语言支持静态类,C++不直接支持静态类的概念,但是可以通过一些技巧来实现类似的功能:仅包含静态成员 + 私有构造函数防止类实例化,所以这里称其为伪静态类

    2024年02月19日
    浏览(34)
  • 【C++】设计模式-单例模式

    目录 一、单例模式 单例模式的三个要点 针对上述三要点的解决方案 常用的两类单例模式  二、懒汉模式实现 1.基本实现 2.锁+静态成员析构单例 3.双层检查锁定优化 4.双层检查锁定+智能指针 三、饿汉模式实现 1.基础实现 2.嵌套内部类解决内存泄漏 3.智能指针解决内存泄漏

    2024年02月16日
    浏览(38)
  • C++设计模式代码--单例模式

    参考:5. 单例模式(Singleton) (yuque.com) 1、什么是单例模式 保证一个类只有一个实例,并提供一个访问该实例的全局节点; 2、什么情况下需要单例模式 某个类的对象在软件运行之初就创建,并且在软件的很多地方都需要读写这个类的信息;使用单例模式的话,类对象就只要

    2024年02月03日
    浏览(54)
  • C++设计模式:单例模式(十)

    1、单例设计模式 单例设计模式,使用的频率比较高,整个项目中某个特殊的类对象只能创建一个 并且该类只对外暴露一个public方法用来获得这个对象。 单例设计模式又分懒汉式和饿汉式,同时对于懒汉式在多线程并发的情况下存在线程安全问题 饿汉式:类加载的准备阶段

    2024年04月14日
    浏览(46)
  • 【设计模式】C++单例模式详解

    ⼀个类仅有⼀个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。 那么,我们必须保证: 该类不能被复制;也不能被公开的创造。 对于 C++ 来说,它的构造函数,拷贝构造函数和赋值函数都不能被公开调用。 单例模式又分为 懒汉模式 和 饿汉模式 ,它们

    2024年02月05日
    浏览(48)
  • 设计模式 : 单例模式笔记

    一个类 只能创建一个对象 ,这样的类的设计模式就称为单例模式,该模式保证 系统中 该类 只能有一个实例 (并且 父子进程共享 ),一个很典型的单例类就是C++STL的内存池 C++单例模式的基本设计思路: 私有化 构造函数 ,删除默认的 拷贝构造函数 和 赋值运算符重载 防止对象被直

    2024年02月12日
    浏览(48)
  • C++单例模式

    1.什么是单例模式 单例模式是指在整个系统生命周期内,保证一个类只能产生一个实例,确保该类的唯一性。 2.单例模式分类 单例模式可以分为 懒汉式 和 饿汉式 ,两者之间的区别在于创建实例的时间不同。 懒汉式 系统运行中,实例并不存在,只有当需要使用该实例时,才

    2024年02月05日
    浏览(31)
  • C++ 【单例模式】

    简单介绍 单例模式是一种 创建型设计模式 | 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。 它也会破坏代码的模块化特性,因为单例模式往往会 承担了很多的职责 ,导致与 其他模块 产生过多的耦合 基础理解 单一职责原则: 一个类或模块应该只有

    2024年04月12日
    浏览(33)
  • C++的单例模式

    忘记之前有没有写过单例模式了。 再记录一下: 我使用的代码: 双锁单例: 单例模式的不同实现方式各有优缺点 双检锁(Double Checked Locking): 优点: 线程安全。 在实例已经被创建之后,直接返回实例,避免了每次获取实例时都需要获取锁的开销。 缺点: 代码相对复杂

    2024年02月10日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包