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

特殊类设计

目录

一.特殊类设计

1.设计一个类,不能拷贝。

2.设计一个类,只能在堆上创建对象。

3.设计一个类,只能在栈上创建对象。

4.实现一个类,该类不能被继承。

二.*设计模式

单例模式

1.饿汉模式 

2.懒汉模式


一.特殊类设计

1.设计一个类,不能拷贝。

将拷贝构造和赋值重载用delete禁掉(C++11);或将构造设为私有(C++98)

2.设计一个类,只能在堆上创建对象

方法一:堆上的对象特点:手动释放资源(析构),而其他对象都是自动生命周期结束后,自动调用析构函数,所以仅需将析构函数设为私有,然后在public中写一个能够释放资源的成员函数即可。

方法二:将构造函数、拷贝构造、赋值重载设为私有,写一个public的静态成员函数(return new tmp;),去调构造。

3.设计一个类,只能在栈上创建对象。

方法:将构造函数封死,用静态成员函数+拷贝构造创建对象。但是,若 new 创建对象时,不是用默认构造初始化,而是用拷贝构造初始化,则也能创建堆上的对象。所以,我们需要对operator new 进行重载,将operator new 禁用掉。

4.实现一个类,该类不能被继承。

方法:①用fianl修饰类(C++11); ②构造函数私有化(C++98)

为什么构造函数私有化能让一个类不能被继承?

--- 基类中的私有成员对于派生类而言“不可见”,而继承时,派生类必须要先调用基类的构造函数,由于派生类无法访问基类中“不可见”的成员,所以基类构造失败。

二.设计模式

啥是设计模式,或者说设计模式有什么用?

设计模式是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。就像人类历史发展会产生兵法,最开始人类部落之间打仗都是人数对拼,后来到了春秋战国,七国之间经常打仗,就发现打仗也是有套路的,后来孙子著兵法,总结打仗的套路。

设计模式的意义:为了代码的可重用性更高、代码更容易被他人理解、保证代码的可靠性。设计模式使用代码编写真正工程化。设计模式是软件工程的基石脉络,如同大厦的结构一样。

*单例模式

一个类只能创建一个对象,即单例模式。单例模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。

比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其它对象再通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。

单例模式有两种实现方式,即懒汉模式和饿汉模式~ ~

单例模式的核心:构造函数私有化 + 私有静态单例对象 + 获取单例对象公有接口。

1.饿汉模式 

特点:在进入main()函数之前,就创建单例对象(仿佛抢不着饭吃,饿死鬼似的)。

在main()函数的外面对静态单例对象实例化,程序启动时,就会在进入main()函数之前就为单例对象开辟资源。

由于单例对象是在类的内部生命的,所以单例对象实例化时,可以访问私有的构造函数。

为防止单例类的拷贝、定义新对象等操作,我们需要将拷贝构造、赋值重载给禁掉。

假设我们想让一份unordered_map类型的资源在整个进程的生命周期中只有一份,就可以将其封装为单例类,具体代码如下:

饿汉模式的缺点:

①如果单例对象初始化内容很多,会影响程序的启动速度;

②如果两个单例类,要求A先创建,B再创建,B的初始化依赖A,无法保证A和B的初始化顺序;

2.懒汉模式

特点:会在进入main()函数之后,当我们调用GetInstance()接口时,才对单例对象实例化。

实现机制:将单例对象设为指针类型,当我们调用GetInstance()时,才对指针开辟空间。

代码如下(仍为保证unordered_map中的资源全局只有一份):

相关文章:

  • CI/CD(九) Jenkins共享库与多分支流水线准备
  • mysql 主从搭建步骤
  • C语言函数(一)
  • 文法 2025/3/3
  • uniapp中uploadFile的用法
  • DEYOLO和YOLO-MS
  • LLM之Agent(十五)| 使用Langchain实现模型上下文协议(MCP)
  • XSS 攻击(详细)
  • 2025 年福建省职业院校技能大赛 中职组 物联网应用与服务(样题)
  • 从JVM到分布式锁:高并发架构设计的六把密钥
  • JavaScript中的NaN、undefined和null 的区别
  • 【NLP 面经 2】
  • 策略模式与元数据映射模式融合 JSR 380 验证规范实现枚举范围校验
  • Linux环境基础开发工具——(1)yum
  • ROS Image and Compressed
  • 本地飞牛NAS快速部署WordPress个人网站并一键上线公网远程访问
  • 异步框架使用loguru和contextvars实现日志按Id输出
  • 第十四章:JSON和CSV格式详解及Python操作
  • 一个判断A股交易状态的python脚本
  • 二、概念篇
  • 网站版块建设/什么软件引流客源最快
  • wordpress下载慢/seo免费课程视频
  • 东营seo网站排名/网站如何优化一个关键词
  • 图书翻页的动画 做网站启动用/深圳seo优化排名公司
  • 外贸是做什么的学什么专业/南宁seo内部优化
  • 盐城专业做网站的公司哪家好/友情链接交换源码