自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(103)
  • 收藏
  • 关注

原创 QT事件:【QT事件】【QT文件】【QT多线程】【QT网络编程】【QT音视频】

事件是应用程序内部或者外部产生的事情或者动作的统称。在Qt中使用一个对象来表示一个事件。所有的Qt事件均继承于抽象类QEvent。事件是由系统或者Qt平台本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。一些事件是在用户操作时发出,如键盘事件、鼠标事件等,另一些事件则是由系统本身自动发出,如定时器事件。

2025-08-30 06:00:00 724

原创 QT界面优化:【QSS】【绘图】

・主动调用 QWidget 类的 repaint () 方法或 update () 方法时(二者均用于触发重绘,区别是 repaint () 会立即执行重绘,update () 会延迟到下一次事件循环统一处理,更节省资源)。使用时也可以自定义画笔,Qt 中的 QPen 类定义了 QPainter 绘制形状、线条和轮廓的方式,通过它可以设置画笔的线宽、颜色、样式、画刷等属性。・调用控件的 setVisible (true) 或 show () 方法,将隐藏的控件显示时。

2025-08-30 06:00:00 1485

原创 QT控件:【输入类控件】【多元素控件】【容器类控件】【布局管理器】

本身的滑动条就可以使用方向键或者page键。这里就自定义一个:简述一下:先创建两个快捷键cut和cut1代表“-”和“+”,然后需要设置信号的槽函数进行回调,里面槽函数的功能就是获取当前滑动条的值,判断是否越界,和重新设置滑动条的值。对于滑动条的槽函数的触发条件是滑动条的值改变(valueChanged),里面就是改变标签的内容。此时就可以使用加减号去调整了。

2025-08-29 06:00:00 1301

原创 QT窗口:【菜单栏】【工具栏】【状态栏】【浮动窗口】【对话框】

目录一. 菜单栏1.1 创建菜单栏1.2 菜单栏中添加菜单1.3 创建菜单项1.4 在菜单项之间添加分割线1.5 给菜单添加快捷键1.6 添加子菜单1.7 讨论MenuBar的创建1.7 综合实践,记事本二. 工具栏2.1 设置工具栏2.2 设置停靠位置2.3 图标覆盖文字菜单项同时用于菜单栏和工具栏2.4 浮动属性2.5 移动属性2.6 综合案例三. 状态栏四. 浮动窗口五. 对话框5.1 连续生成对话框?5.2 自定义对话框5.3 模态对话框5.4 混合属性对话框5.5 Qt内置对话框5.5.1 消息对

2025-08-29 06:00:00 1255

原创 QT控件:【控件概述】【QWidget核心体系】【按钮类控件】【显示类控件】

Widget 是 Qt 中的核心概念。英文原义是 "小部件",我们此处也把它翻译为 "控件"。控件是构成一个图形化界面的基本要素。像上述示例中的,按钮、列表视图、树形视图、单行输入框、多行输入框、滚动条、下拉框等,都可以称为 “控件”。Qt 作为一个成熟的 GUI 开发框架,内置了大量的常用控件。这一点在 Qt Designer 中就可以看到端倪。并且 Qt 也提供了 “自定义控件” 的能力,可以让程序员在现有控件不能满足需求的时候,对现有控件做出扩展,或者手动开发出新的控件。这些全是控件。

2025-08-28 18:04:31 855

原创 QT:【第一个QT程序】【信号和槽】

在 Qt 中,允许自定义信号的发送方以及接收方,即可以自定义信号函数和槽函数。但是对于自定义的信号函数和槽函数有一定的书写规范。1、自定义信号函数书写规范(1)自定义信号函数必须写到 "signals" 下;(2)返回值为 void,只需要声明,不需要实现;(3)可以有参数,也可以发生重载;2、自定义槽函数书写规范(1)早期的 Qt 版本要求槽函数必须写到 "public slots" 下,但是现在高级版本的 Qt 允许写到类的 "public" 作用域中或者全局下;

2025-08-28 18:04:21 1123

原创 Linux数据库:【视图】【用户管理】【MySQL访问】【图形化界面登陆数据库】

初始化mysql_init()要使用库,必须先进行初始化!如: MYSQL *mfp = mysql_init(NULL)链接数据库mysql_real_connect下发mysql命令mysql_queryint main()// 1. 创建句柄return 1;// 2.链接数据库return 2;// 3.设置字符集// 4.执行命令break;return 0;数据库中查:但是使用查询语句不行。

2025-08-23 19:50:45 685

原创 Linux数据库:【事务】

事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部 失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的 数据是不相同的。事务就是要做的或所做的事情,主要用于处理操作量大,复杂度高的数据。

2025-08-21 21:28:53 797

原创 Linux数据库:【索引】

假如我要频繁的找名字对应的email,这里的复合索引就能起到作用,因为找到名字了,与其对应的email一定是一起的,就不用再去找主键,重新的查找了,这就是索引覆盖。所以,就在单Page里面,大大减少了IO的次数。在单表数据不断被插入的情况下, MySQL 会在容量不足的时候,自动开辟新的Page来保存新的数据,然 后通过指针的方式,将所有的Page组织起来。但是,我们也可以看到,现在的页 模式内部,实际上是采用了链表的结构,前一条数据指向后一条数据,本质上还是通过数据的逐条 比较来取出特定的数据。

2025-08-19 18:48:37 1174

原创 Linux数据库:【内置函数】【复合查询】【表的内连和外连】

多行子查询是指返回单列多行数据,都是针对单列而言 的,而多列子查询则是指查询返回多个列数据的子查询语句。内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连 接,也是在开发过程中使用的最多的连接查询。这个不推荐,注意,因为涉及到分组,想要显示其他的,比如想显示loc,就必须在group by后面也加上loc。这里要用到数据查询的技巧,把一个子查询当做一个临时表使用。查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自 己的。

2025-08-16 19:18:58 795

原创 Git版本控制器

干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布 时,再把dev分支合并到master上,在master分支发布1.0版本;这个版本库里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git 都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。可以看到,修改bug的时候,对主分支上面的代码修改了,dev2分支的代码和master的最新提交的代码不一样(dev2上面的代码还是基于master分支创建的那个有bug的代码)。合并的话会合并冲突?

2025-08-15 19:19:22 654

原创 Linux数据库:【表的约束】【表的基本查询】

理论上,上面的例子,我们不创建外键约束,就正常建立学生表,以及班级表,该有的字段我们都有。假设一个场景(当然,具体可能并不是这样,仅仅为了帮助大家理解) 比如在公司,我们需要一个员工管理系统,系统中有一个员工表,员工表中有两列信息,一个身份证号码,一 个是员工工号,我们可以选择身份号码作为主键。在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结 构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。可以发现,除了10剩下的全都补0了。

2025-08-14 21:20:39 1094

原创 多路转接之epoll 【接口】【细节问题】【LT与ET模式】【Reactor】

使用 ET 模式的 epoll, 需要将文件描述设置为非阻塞. 这个不是接口上的要求, 而是 "工 程实践" 上的要求. 假设这样的场景: 服务器接收到一个 10k 的请求, 会向客户端返回一个应答数据. 如果客 户端收不到应答, 不会发送第二个 10k 请求.如果服务端写的代码是阻塞式的 read, 并且一次只 read 1k 数据的话(read 不能保证一 次就把所有的数据都读出来, 参考 man 手册的说明, 可能被信号打断), 剩下的 9k 数据 就会待在缓冲区中.

2025-08-12 19:52:43 810

原创 五种IO模型 && 阻塞IO && 多路转接之select && 多路转接之poll

poll的结构:events事件:其他的返回结果什么的,跟上面的select完全一样。

2025-08-08 16:07:52 638

原创 HTTPS【什么是HTTPS】【为什么要加密】【常见的加密方式】【数据摘要 && 数据指纹】【HTTPS的工作过程探究】【数据签名】【CA证书】【非对称加密 + 对称加密 + 证书认证】

HTTPS(HyperText Transfer Protocol Secure)是HTTP的安全版本,通过加密技术(如SSL/TLS协议)保护数据传输的隐私和完整性。它确保客户端(如浏览器)与服务器之间的通信不被窃听或篡改,广泛应用于登录、支付、敏感信息传输等场景。• 数字指纹(数据摘要),其基本原理是利用单向散列函数(Hash 函数)对信息进行运算, 生成一串固定长度的数字摘要(也就是说,假如有多个十万字的文章,通过hash映射为一个固定长度的字符串,因为是hash映射,所以不存在解密过程)。

2025-08-04 17:09:36 1101

原创 数据链路层、NAT、代理服务、内网穿透

• 反向代理服务器是一种网络架构模式,其作为 Web 服务器的前置服务器,接收来自客户端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回 给客户端。• 源主机发出 ARP 请求,询问“IP 地址是 192.168.0.1 的主机的硬件地址是多少”, 并将这个请求广播到本地网段(以太网帧首部的硬件地址填 FF:FF:FF:FF:FF:FF 表示 广播);现在它们都要访问一个直播平台,这个直播平台直接把它们的IP地址给交换了,使主播的直播画面,信息等不经过平台的服务器,直接把画面推送给用户。

2025-08-02 20:51:23 783

原创 IP协议详解:从网段划分到分片组装

对于 ftp 这样的程序, 最大吞吐量比较重要.• 13 位分片偏移(framegament offset): 是分片相对于原始 IP 报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 8 得到的. 因此, 除了最后一个报文之外, 其他报文的长度必须是 8 的整数倍(否则报文 就不连续了).通过合理设置主机号和网络号, 就可以保证在相互连接的网络中, 每台主机的 IP 地址都 不相同. 那么问题来了, 手动管理子网内的 IP, 是一个相当麻烦的事情.

2025-08-01 16:45:02 995

原创 传输层协议UDP与TCP

• 由于我们的请求量很大, 就可能导致 TIME_WAIT 的连接数很多, 每个连接都会占用一个通信五元组(源 ip, 源端口, 目的 ip, 目的端口, 协议). 其中服务器的 ip 和端 口和协议是固定的. 如果新来的客户端连接的 ip 和端口号和 TIME_WAIT 占用的链 接重复了, 就会出现问题.大量的丢包, 我们就认为网络拥塞;接收端处理数据的速度是有限的. 如果发送端发的太快, 导致接收端的缓冲区被打满, 这 个时候如果发送端继续发送, 就会造成丢包, 继而引起丢包重传等等一系列连锁反应.

2025-07-30 18:43:59 828

原创 HTTP协议

URL是什么?

2025-07-28 18:54:48 611

原创 计算机网络:【socket】【UDP】【地址转换函数】【TCP】

它返回的是一个文件描述符。创建socket文件描述符(TCP/UDP,客户端服务器• socket()打开一个网络通讯端口,如果成功的话,就像 open()一样返回一个文件描 述符;• 应用程序可以像读写文件一样用 read/write 在网络上收发数据;• 如果 socket()调用出错则返回-1;• 对于 IPv4, family 参数指定为 AF_INET;• 对于 UDP 协议,type 参数指定为 SOCK_DGRAM, 表示面向数据报的传输协议。

2025-07-01 17:08:37 886

原创 Linux数据库:【数据库基础】【库的操作】【表的操作】

数据库是一个用于存储和管理数据的系统。它可以帮助用户组织、检索、更新和管理大量数据。mysql是数据库服务的客户端,mysqld是数据库服务的服务端,它的本质就是基于CS模式的网络服务。文件保存数据有以下几个缺点:文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便比如我们在一个普通文件里写入大量的数据(十万行十亿行),那么多的数据在普通文件里,我们如果想要管理起来这是非常麻烦的一件事,比如我要修改十亿行数据里的第一百万行,怎么搞?

2025-04-06 00:00:00 1109

原创 Linux线程同步与互斥:【线程互斥】【线程同步】【线程池】

生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区, 平衡了生产者和消费者的处理能力。因为我在当前的进程没有进行释放锁的操作,我是持有锁被切换的,相当于拿着钥匙,钥匙不给其他线程,其他线程也只能干等着,等我回来释放锁,其他线程才能展开锁的竞争,进入临界区。• 但有时候,很多变量都需要在线程间共享,这样的变量称为共享变量,可以通过数据的共享,完 成线程之间的交互。

2025-04-05 00:00:00 1068

原创 Linux线程概念与控制:【线程概念(页表)】【Linux线程控制】【线程ID及进程地址空间布局】【线程封装】

• 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”• 一切进程至少都有一个执行线程• 线程在进程内部运行,本质是在进程地址空间内运行• 在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化• 透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形 成了线程执行流。

2025-04-04 00:00:00 852

原创 Linux进程信号:【什么是信号】【产生信号】【保存信号】【捕捉信号】【可重入函数】【volatile】【SIGGHLD】

闹钟响了,上课铃响了,肚子饿了。这些都是给人的信号,人可以接收这些信号,从而去处理信号。信号的三种处理方式:默认处理动作(我饿了,立刻就去吃饭),自定义处理信号(我饿了,先打完这把游戏再吃),忽略信号(我饿了,但我现在就是不吃)。你怎么能识别信号呢?识别信号是内置的,进程识别信号,是内核程序员写的内置特性。信号产生之后,你知道怎么处理吗?知道。如果信号没有产生,你知道怎么处理信号吗?知道。所以,信号的处理方法,在信号产生之前,已经准备好了。处理信号,立即处理吗?

2025-04-03 00:00:00 1008

原创 Linux进程间通信:【目的】【管道】【匿名管道】【命名管道】【System V 共享内存】

第二次循环,再次创建管道文件,因为父进程的3已经被关闭了,所以重新分配的话会分配3和5,后面依然会关闭3,此时就要创建新的子进程了,那么这个子进程有了上面的经验,这个子进程就会进程父进程所有的东西,包括上面父进程的4。上面的方法并不好,虽然解决了问题,这里我们希望只让父进程的写端指向我们的文件,所以我们在每一次的创建新的子进程的时候,让子进程把它的兄弟进程的写端给关掉,根本不增加引用计数的机会。在创建子进程的时候,子进程会继承父进程的文件描述符表,所以子进程的文件描述符表需要关闭写端,父进程需要关闭读端。

2025-04-02 00:00:00 1390

原创 Linux库制作与原理:【静态库】【动态库】【目标文件】【ELF文件】【ELF从形成到假造轮廓】【理解链接和加载】

库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:• 静态库 .a[Linux]、.lib[windows]• 动态库 .so[Linux]、.dll[windows]预备代码,第三节:简单封装的libc库• 静态链接的出现,提高了程序的模块化水平。对于一个大的项目,不同的人可以独立地测试和开发自己的模块。

2025-02-11 15:36:55 991

原创 Linux Ext系列文件系统:【理解硬件(磁盘)】【引入文件系统】【ext2文件系统】【软硬链接】

目录一、理解硬件(磁盘)1.1磁盘的存储结构 1.2磁盘的逻辑结构1.3CHS与LBA地址转换二、引入文件系统2.1块​编辑 2.2分区2.3inode三、ext2文件系统 3.1宏观认识 3.2Block Group3.3块组内部构成3.3.1超级块(Super Block)3.3.2GDT(Group Descriptor Table)3.3.3块位图(Block Bitmap)3.3.4inode位图(Inode Bitmap)3.3.5节点表(Inode Table)3.3.6Data B

2025-02-08 12:07:15 908

原创 Linux基础IO【系统文件I/O】【理解“一切皆文件”】【缓冲区】

pathname: 要打开或创建的⽬标⽂件flags: 打开⽂件时,可以传⼊多个参数选项,⽤下⾯的⼀个或者多个常量进⾏“或”运算,构成flags。参数:O_RDONLY: 只读打开O_WRONLY: 只写打开O_RDWR : 读,写打开这三个常量,必须指定⼀个且只能指定⼀个O_CREAT : 若⽂件不存在,则创建它。需要使⽤mode选项,来指明新⽂件的访问权限O_APPEND: 追加写返回值:成功:新打开的⽂件描述符失败:-1缓冲区是内存空间的一部分。

2025-02-06 13:46:39 1035

原创 Linux进程控制:【进程创建】【进程终止】【进程等待】【进程程序替换】【自主shell命令行解释器】

程序替换是通过特定的接口,加载磁盘上的一个全新的程序(代码和数据),加载到调用进程的地址空间 中!我们知道,进程在被杀死后就会进入僵尸状态,在task_struct内部会记录我们此时的退出状态和信号信息等,父进程进行系统调用(wait)找到子进程,把信息按位操作通过status交到父进程所对应的地址空间上。5.光返回0还不够,我们需要在父进程的外部加一个循环(非阻塞轮询),使得父进程的waitpid隔一段时间就查一下,而隔一段的这个时间,父进程就可以干自己的事情,具体怎么干,参考上面的代码。

2025-02-01 21:11:37 833

原创 Linux进程概念:【环境变量】【程序地址空间】

◦ 众所周知,编译完成后的程序是存放在硬盘上的,当运行的时候,需要将程序搬到内存当中去运行,如果直接使用物理地址的话,我们无法确定内存现在使用到哪里了,也就是说拷贝的实际内存地址每一次运行都是不确定的,比如:第一次执行a.out时候,内存当中一个进程都没有运行,所以搬移到内存地址是0x00000000,但是第二次的时候,内存已经有10个进程在运行了,那执行a.out的时候,内存地址就不一定了。• 因为有地址空间的存在和表表的映射的存在,我们的物理内存中可以对未来的数据进行任意位置 的加载!

2025-01-26 14:41:53 1112

原创 Linux初识:【冯诺依曼体系结构】【操作系统概念】【进程部分概念(进程状态)(进程优先级)(进程调度队列)】

假如磁盘写这100MB的内存失败了,磁盘就会去找进程,但是进程已经死亡了,无法找到进程,此时磁盘也不知道怎么办了,这100MB的东西就丢失了。因为进程在启动时会记录下来当前路径,而fopen就是进程中的一句代码,fopen在创建文件的时候,会默认的获取工作路径,在路径后面加上我们新建的代码。这个exe就是我们对应的可执行文件,当进程在跑的时候我们甚至可以把这个文件删除也不会影响我们正在跑的进程,因为删除的这个文件已经被执行了,上面说过的一个东西程序被执行就一定要先加载到内存,我们删除的只是磁盘上的文件。

2025-01-24 13:58:05 1029

原创 Linux初识:【版本控制器Git】【调试器gdb/cgdb使用】

所谓的版本控制器,就是能让你 了解到一个文件的历史,以及它的发展过程的系统。通俗的讲就是一个可以记录工程的每一次改动和版本迭代的一个管理系统,同时也方便多人协同作业。程序的发布方式有两种, debug 模式和 release 模式, Linux gcc/g++ 出来的二进制程 序,默认是 release 模式。当我们在上面用Windows机器对文件进行了修改更新了远端仓库的内容,那我的Linux机器并不知道远端更新了,这时如果我去。它会记录我们所有的修改记录,git在提交的时候只会记录变化的部分。

2025-01-20 17:25:21 1016

原创 Linux初识:【make/Makefile】【进度条】

从上到下扫描,刚开始是没有.o文件的,理解为先把这段指令入栈,往下执行,也没有.s文件,也入栈,以此类推一直到.i所依赖的.c文件,执行这段代码,生成.i文件,一直往上走。5.当然,你的C文件和H文件是存在的,于是make会生成myproc.o文件,然后再用myproc.o文件声明make的终极任务,也就是执行文件。7.在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理。

2025-01-19 16:59:50 815

原创 Linux初识:【Linux软件包管理器yum】【Linux编辑器-vim的使用】【Linux编译器-gcc/g++的使用】

在Linux下安装软件,一个通常的办法是下载到程序的源代码,并进行编译,得到可执行程序.但是这样太麻烦了,于是有些人把一些常用的软件提前编译好,做成软件包(可以理解成windows上的安装程序)放在一个服务器上,通过包管理器可以很方便的获取到这个编译好的软件包,直接进行安装.软件包和软件包管理器,就好比"App"和"应用商店"这样的关系.

2025-01-18 16:34:17 1494

原创 Linux初识:【shell命令以及运行原理】【Linux权限的概念与权限管理】

你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提 亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫 它王婆,它对应我们常使用的bash。那么我就必须开放权限给组长,如果只有文件拥有者和other的话,我开放权限就只能开放other的权限,那么其他所有人是不是都可以看见了,为了避免这样的情况发生,就专门设置了一个叫做所属组的东西,使开权限只让所属组看到。在特殊情况下,配置umask可以控制文件的默认权限,让我们的代码是可控的。

2025-01-15 16:07:15 1138

原创 Linux初阶:【在Linux系统中,一切皆文件】【文件类型】【部分指令】

我们是设备在启动的时候默认会打开三个设备文件,这三个文件会以FILE*的形式给我们呈现出来,让我们去访问对应的文件。跟Windows差不多,我们在进行文件传输时,为了节省传输的时间,我们通常会对文件进行压缩处理,然后再去进行文件传输。我在echo命令的后面加一个“>”符号,就说明我要把这个字符串写到hello.txt文件里,而不再是默认的显示器文件里。head查看开始的,tail查看最后的。在不同的终端用echo重定向输出字符串到另一个终端里,这充分可以证明终端也是文件 (每一次我们登录就是新建文件)。

2025-01-14 14:49:19 1113

原创 Linux初识:搭建环境,Xshell远程登录

1. 直接安装在物理机上. 但是由于 Linux 桌面使用起来非常不友好, 不推荐.2. 使用虚拟机软件, 将 Linux 搭建在虚拟机上. 但是由于当前的虚拟机软件(如 VMWare 之类的)存在一些 bug , 会导致环境上出现各种莫名其妙的问题, 比较折腾.3. 使用云服务器, 可以直接在 腾讯云, 阿里云或华为云 等服务器厂商处直接购买一个云服务器.这里对于新手推荐直接购买云服务器,好用也好实现。以阿里云为例:可以自行选择。

2025-01-12 17:07:16 391

原创 C++进阶:异常

• 异常处理机制允许程序中独立开发的部分能够在运行时就出现的问题进行通信并做出相应的处理, 异常使得我们能够将问题的检测与解决问题的过程分开,程序的一部分负责检测问题的出现,然后解决问题的任务传递给程序的另一部分,检测环节无须知道问题的处理模块的所有细节。上面的代码就是在除以0时抛出异常,但是抛出异常后在Func函数里有资源需要释放,但是捕捉异常的特性就是直接跳到catch位置,这里的资源没法释放就会资源泄漏,所以这里我们套一个catch捕捉异常,先把资源释放掉再去throw抛异常,外部再去捕捉。

2025-01-12 14:28:32 1108

原创 C++11:【包装器】【智能指针】

weak_ptr支持expired检查指向的 资源是否过期,use_count也可获取shared_ptr的引用计数,weak_ptr想访问资源时,可以调用lock返回一个管理资源的shared_ptr,如果资源已经被释放,返回的shared_ptr是一个空对象,如 果资源没有释放,则通过返回的shared_ptr访问资源是安全的。RAII在获取资源时把资源委托给一个对象,接着控制对资源的访问, 资源在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源,这样保障了资源的正常释放,避免资源泄漏问题。

2025-01-12 14:28:09 1239

原创 C++11:【可变参数模版】【移动构造和移动赋值】【lambda】

• 仿函数的类名是编译按一定规则生成的,保证不同的 lambda 生成的类名不同,lambda参数/返 回类型/函数体就是仿函数operator()的参数/返回类型/函数体, lambda 的捕捉列表本质是生成的仿函数类的成员变量,也就是说捕捉列表的变量都是 lambda 类构造函数的实参,当然隐式捕捉,编译器要看使用哪些就传那些对象。当使用混合捕捉时,第一个元素必须是&或=,并且&混合捕捉时,后面的捕捉变量必须是值捕捉,同理=混合捕捉时,后面的捕捉变量必须是引用捕捉。捕捉列表为空也不能省略。

2024-12-10 21:46:28 797

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除