- 博客(31)
- 收藏
- 关注
原创 【类与对象(下)】探秘C++构造函数初始化列表
本文探讨了C++构造函数的初始化列表用法及其优势,分析了静态成员、友元、内部类和匿名对象等特性。初始化列表能高效初始化成员变量,特别是引用、const成员和没有默认构造的类类型成员。静态成员属于类而非对象,需在类外初始化。友元机制可突破封装限制,但会增加耦合度。内部类是外部类的友元类,可实现专属封装。匿名对象生命周期仅限当前行,适合临时使用。此外,现代编译器会对对象拷贝进行优化,减少不必要的构造调用。这些特性在提高代码效率的同时也需要注意使用场景和限制。
2025-08-13 16:43:49
1053
36
原创 万字详解C++11列表初始化与移动语义
C++11新特性摘要 列表初始化:C++11扩展了{}初始化,支持自定义类型,统一初始化方式,引入std::initializer_list简化容器初始化。 右值引用与移动语义:通过右值引用(T&&)实现资源转移,减少拷贝。移动构造和移动赋值“窃取”右值资源,提升效率。std::move强制转为右值。 完美转发:结合模板和引用折叠规则(T&&为万能引用),std::forward保持参数原始属性(左值/右值),确保参数传递时类型不变。 可变参数模板:支持参数包(Args...
2025-08-13 16:43:24
1350
14
原创 【类与对象(中)】C++类默认成员函数全解析
本文主要介绍了C++中类的默认成员函数及其特性。重点讲解了构造函数、析构函数、拷贝构造函数和运算符重载等核心概念: 构造函数与析构函数: 构造函数用于对象初始化,可重载,若不显示定义则生成默认无参构造 析构函数用于资源清理,生命周期结束时自动调用 资源申请类必须自定义析构,否则可能泄漏 拷贝构造: 必须使用引用参数避免无限递归 编译器默认生成浅拷贝,资源类需自定义深拷贝 传值返回会调用拷贝构造,传引用返回需确保对象存活 运算符重载: 通过operator+运算符定义 成员函数第一个参数隐式为this指针 不
2025-08-08 22:46:45
1354
25
原创 【类与对象(上)】C++封装之美:类与this指针解析
本文介绍了C++中类的核心概念,包括封装、访问权限、对象大小、this指针等。类通过将数据和方法封装在一起,并设置访问权限(public/private)来实现更严格的代码管理。成员函数默认内联,对象大小仅包含成员变量,this指针隐式传递对象地址。相比C语言,C++的类提供了更好的封装性,通过访问限定符限制数据访问,避免随意修改,同时简化了函数调用方式。文章还对比了C和C++实现栈的代码差异,展示了面向对象编程的优势。
2025-08-05 22:08:15
1319
19
原创 线程互斥锁:守护临界区的关键
本文介绍了线程同步中的互斥机制。关键概念包括:临界资源(多线程共享的资源)、临界区(访问共享资源的代码段)和原子性(不可分割的操作)。通过售票系统示例展示了多线程并发操作共享变量导致的问题,分析原因是由于非原子操作(如ticket--)在多线程环境下被中断。为解决此问题,引入了互斥锁(mutex)机制,详细说明了其初始化、加锁和解锁操作,并给出了改进后的售票系统代码。此外,文章还介绍了线程同步的条件变量及其相关函数(wait/signal/broadcast),以及死锁产生的四个必要条件(互斥、请求保持、不
2025-08-04 22:46:28
1400
14
原创 【C++】面向对象编程:继承与多态的魅力
本文系统介绍了C++面向对象编程中的继承与多态机制。在继承部分,详细阐述了继承的概念、定义方式、访问权限控制、作用域隐藏规则以及派生类的默认成员函数实现要点。特别分析了多继承带来的菱形继承问题及虚继承解决方案。在多态部分,重点讲解了动态多态的实现条件:基类指针/引用调用虚函数,派生类必须重写虚函数。深入探讨了虚函数表原理、虚函数重写的特殊情况(协变、析构函数重写)以及override/final关键字的使用。最后介绍了抽象类和纯虚函数的概念,通过虚函数表指针的存储布局分析多态的实现机制。全文通过丰富代码示例
2025-08-03 16:36:14
1321
19
原创 【C++模板编程】:从初阶到进阶
C++模板编程是一种实现代码重用和类型安全的泛型编程范式。文章介绍了模板的基础概念和进阶应用:1)基础部分包括函数模板和类模板的定义与使用,通过类型参数实现通用算法;2)进阶部分涵盖非类型模板参数、模板特化(全特化和偏特化)等技术,用于处理特殊类型场景。文章通过swap函数、日期类等实例演示了模板的实际应用,并分析了模板实例化的底层实现机制。模板编程能显著提高代码复用性,同时保持类型安全,是C++重要的编程技术之一。
2025-08-02 10:37:13
304
6
原创 【C++数据结构】:栈和队列的奥秘
本文介绍了三种常见容器适配器:栈(Stack)、队列(Queue)和优先级队列(Priority Queue)。栈基于vector实现,遵循LIFO原则;队列基于list实现,遵循FIFO原则;优先级队列默认使用vector构建大顶堆,也可通过greater算法构建小顶堆。文章还解释了容器适配器的概念,指出它们是对底层容器(如deque、vector、list)的接口封装。最后介绍了deque作为双端队列的特性,在头尾操作效率与空间利用率上的优势。这些容器适配器通过包装底层容器,提供了特定数据结构的标准操作
2025-08-01 12:30:08
328
12
原创 【进程与线程】:内核视角下的执行流奥秘
本文从概念和内核角度分析了线程与进程的区别。进程作为资源分配的基本单位拥有独立的地址空间,而线程作为CPU调度的基本单位共享进程资源。Linux通过轻量级进程模拟线程实现,本质是对地址空间的划分与共享。文章详细探讨了虚拟地址与页表机制,解释了4KB分页管理原理,以及多级页表如何解决内存碎片问题。最后指出线程控制块(TCB)通过"先描述再组织"方式管理线程资源,而pthread_create()会同时创建用户态管理结构和内核态轻量级进程。全文系统性地阐述了线程实现的底层机制与设计思想。
2025-07-31 22:29:49
853
8
原创 【探索进程信号】:信号捕捉
文章摘要:本文详细介绍了Linux系统中的信号机制,包括异步/同步概念、信号产生方式(用户/系统/软件)、信号处理(默认/自定义/忽略)以及信号捕捉过程。重点分析了前台/后台进程的区别、信号发送本质(修改内核位图)、信号与中断的关系(硬件/软件中断),并深入探讨了进程从用户态到内核态的切换机制。文章还解释了系统调用实现原理(通过中断向量表和系统调用号),以及操作系统作为"中断处理代码块"的本质特性。信号机制实质上模拟了硬件中断,是进程间异步通信的重要方式。
2025-07-30 21:37:35
1260
8
原创 【C++篇】“内存泄露”的宝藏手段:智能指针
文章摘要:本文分析了C++智能指针的使用场景及其设计原理。通过示例展示了传统指针在异常处理中可能出现的内存泄漏问题,并演示了如何通过智能指针的RAII机制自动管理资源释放。文章详细介绍了auto_ptr、unique_ptr、shared_ptr和weak_ptr四种智能指针的特点及适用场景:auto_ptr存在资源转移导致的悬空指针问题;unique_ptr采用独占所有权模式;shared_ptr通过引用计数实现共享所有权;weak_ptr则用于解决shared_ptr循环引用问题。最后讨论了定制删除器的
2025-07-29 21:09:34
866
7
原创 共享内存:进程通信速度之王
共享内存是Linux进程间通信最快的方式,通过将同一物理内存映射到不同进程的虚拟地址空间实现数据共享。它属于用户空间,生命周期随内核,需手动删除。使用时通过shmat系统调用映射到进程地址空间。优点是无须系统调用直接访问,但缺乏同步机制可能导致数据不一致。System V标准提供了共享内存、消息队列和信号量等IPC机制,其中信号量用于保护临界资源,确保互斥访问。共享内存的创建通过key标识唯一性,管理命令如ipcs和ipcrm操作的是用户层的id而非内核使用的key。临界区代码需原子性保护,信号量作为计数器
2025-07-28 21:01:13
642
7
原创 深入探索Linux:忙碌的车间“进程”间通信
本文摘要: 进程间通信(IPC)是操作系统中实现不同进程数据交换的重要机制。文章首先分析了IPC的必要性,包括数据传输、资源共享、事件通知和进程控制等场景。重点介绍了两种管道通信方式:匿名管道和命名管道。匿名管道通过文件描述符实现血缘关系进程间的单向通信,具有同步机制、字节流传输和随进程生命周期等特点;命名管道则通过创建特殊文件实现无血缘关系进程的通信。文章详细阐述了管道的工作原理、5种特性、4种通信情况,并通过C++代码示例展示了进程池的实现和命名管道的应用。最后指出管道是Unix最古老的IPC形式,其本
2025-07-28 20:44:58
1028
8
原创 每日一篇博客:理解Linux动静态库
库是写好的现有的,成熟的,可以复⽤的代码。比如,在平时编写代码时,许多函数都是通用的,如果没有库,人们在编写代码时就需要将这些通用的函数都自己实现一份。将这些通用的函数都编写到一起,这样,就形成了一个库。在Linux下:静态库:xxx.a动态库:xxx.so在windows下:静态库:xxx.lib动态库:xxx.dll。
2025-06-18 23:51:30
1279
13
原创 【Linux篇】操作世界的“纤丝”:IO
cnt的变量,用来记录有多少进程在访问文件,当一个进程结束访问文件,引用计数就减1,直到0,关闭文件。这类似于智能指针shared。为什么各个语言都要做系统级别的封装?本质不是通过C语⾔/C++的库函数。operation中,让f。VFS:虚拟文件系统。
2025-06-17 23:44:55
1357
6
原创 【Linux篇】进程运行行云流水的秘密---进程控制
fork() 之后,⽗⼦各⾃执⾏⽗进程代码的⼀部分如果⼦进程就想执⾏⼀个全新的程序呢?进程的程序 替换来完成这个功能!程序替换是通过特定的接⼝,加载磁盘上的⼀个全新的程序(代码和数据),加载到调⽤进程的地址空间中!替换原理fork创建子进程后,父子进程执行的是一样的程序,有时可能会执行不同的代码分支。若要让子进程执行一个新的程序,就要使用一种exec函数。调用这种函数时,会将全新的代码和数据覆盖原代码和数据。用下图举例就是:将原PCB种的栈、堆、数据段、代码段替换成新进程的数据段、代码段、栈堆。
2025-06-15 23:32:28
1458
8
原创 【Linux篇】细品环境变量与地址空间
再拿着命令(如ls)在环境变量表中找到PATH,将PATH中保存的路径一 一添加到命令前查找命令,找到就执行,没找到就告诉系统”command not found“。因为执行export不需要创建子进程,而是bash自己执行。,即”环境变量表“,当用户输入命令时,bash会先得到这串命令,然后分割形成一张。子进程继承了环境变量,就能执行一些个性化操作,比如定制一个只能自己执行的程序。所以环境变量表的本质:是操作系统在自己配置文件中提供的。:在用户登录的时候,会分配一个bash,b。
2025-06-10 23:38:08
1365
9
原创 【Linux篇】0基础之学习操作系统进程
本文摘要:文章系统介绍了计算机体系结构和进程管理的核心概念。首先阐述了冯诺依曼体系结构的五大组成部分(输入设备、输出设备、存储器、运算器、控制器)及其数据流动特点,强调CPU只能直接访问内存。然后深入讲解了进程管理机制,包括进程控制块(PCB)的数据结构、进程状态转换(运行、就绪、阻塞等)、进程调度算法以及优先级管理。特别分析了Linux系统中的进程实现,如task_struct结构体、僵尸进程和孤儿进程的处理。最后讨论了进程切换的底层机制,包括上下文保存/恢复和调度器的工作原理。全文通过大量实例和类比,揭
2025-06-05 22:09:47
1400
16
原创 【Linux篇】叩响新世界的大门:线程
本文从感性到理性多角度解析线程概念:线程是进程内的执行分支,本质是轻量级进程。内核视角下,进程承担资源分配,线程作为调度单位。关键点:1)Linux用进程模拟线程;2)资源划分即地址空间划分;3)线程共享进程地址空间和页表条目;4)线程库通过TCB结构管理线程状态;5)创建线程涉及用户态库和内核态LWP协同工作。文章还探讨了虚拟地址与物理内存的映射机制,指出4KB页框管理是底层基础,线程的执行流本质是对虚拟地址资源的访问控制。
2025-05-29 23:54:27
1239
11
原创 【linux篇】动静态库和自动化构建的“神之一手”:make、Makefile
BIN赋值为mytest(目标文件)SRC动态的获取所有源文件OBJ赋值为依赖文件CC赋值为gccRM赋值为rm -f@echo:不让echo回显BIN赋值为mytest(目标文件)SRC=动态的获取所有源文件(wildcard是Makefile自身语法包含的函数)OBJ=(SRC:.c=.o表示将所有的.c换成.o形成可执行程序。这是Makefile自己的语法)CC赋值为gccRM赋值为rm -f$^:表示将所有的OBJ文件放到(CC)后,也可以理解为:$^就是OBJ。
2025-05-27 23:09:52
1365
10
原创 0基础学习Linux之揭开朦胧一面:环境基础开发工具
本文总结了Linux系统下软件安装与vim编辑器的核心知识要点。主要内容包括:1)Linux软件安装的三种方式(源码、rpm包、包管理器),重点介绍了yum包管理器的功能与使用方法;2)操作系统的生态评价标准,比较了CentOS/Ubuntu/Kali的生态差异;3)vim编辑器的多模式操作,详细说明了命令模式(光标定位、复制粘贴等)、底行模式(保存退出、查找替换等)和插入模式的使用技巧,以及批量操作、撤销恢复等实用功能。文章为Linux系统管理和代码编辑提供了实用参考。
2025-05-26 22:56:14
1422
12
原创 【linux篇】操作系统的第一道防线:权限
权限本质:能或不能做某些事情。权限决定了能还是不能做的问题。为什么要有权限:为了控制用户的行为,防止错误的发生。权限规则的设定永远时最顶级的上层人设计,比如写 Linux 的程序员,以限制普通用户的行为,防止混乱和错误的发生权限的理解:1.校长能进校长办公室,而你不能。说明权限限制的是“人”。若校长叫“老王”,那校长能进办公室是因为他叫老王还是因为它是校长?所以,重要的不是你是谁,而是你扮演的是什么角色。权限首先限制的是角色。
2025-05-25 23:57:25
1061
14
原创 【linux篇】系统世界跳跃的音符:指令
本文介绍了Linux系统的基本文件操作指令。主要内容包括:Linux文件系统采用多叉树结构,文件由内容和属性组成;常用指令如ls(显示文件)、touch(创建文件)、mkdir/rmdir(目录操作)、cp(拷贝)、head/tail(查看文件)等;文件压缩解压工具zip/unzip和tar的使用;以及Linux间文件传输命令scp。文章还讲解了路径概念(绝对/相对路径)、重定向操作(>、>>、<)和常用热键(Tab补全、Ctrl+C终止等)。这些基础指令和概念是Linux系统操作的
2025-05-25 23:39:38
1192
5
原创 【C++】“美丽的字符”:string类
string是一个类,原模版类型叫"basic_string",基础串。但平时基本上不会使用"basic_string"这个类。我们使用的是"string"这个类,string是一个第一个模板参数传"char"的"basic_string",它是typedef出来的一个类(日常使用的是这个)u16string,是一个传16位的char,是两字节。u32string,是一个传32位的char,是四字节。在c语言中,字符串是以'\0'结尾的一些字符集合,为了操作方便,c语言提供了一些str系列的库函数,但是这些
2025-05-19 18:19:03
1614
9
原创 走进文件底层世界:是为更加了解你
本文详细介绍了C语言中的文件操作,包括文件的基本概念、文件指针的使用、文件的打开与关闭方法、读写操作(使用fgetc、fgets、fread、fputc、fputs、fwrite等函数)、文件定位(fseek、ftell、rewind)、错误处理(feof、ferror)以及文件删除与重命名(remove、rename)等操作。通过具体示例代码,帮助读者掌握C语言文件处理的核心技术,为实际编程应用提供指导。
2025-05-01 19:37:32
1142
2
原创 【重新认识C语言----结构体篇】
本文全面介绍了C语言中结构体的使用方法。首先阐述了结构体的基本概念和定义方式,包括为什么需要结构体以及如何定义结构体。其次详细讲解了结构体变量的声明与初始化方法、成员访问操作(点运算符和箭头运算符)。文章还深入分析了结构体的内存布局规则和手动控制对齐的技巧。在高级用法部分,涵盖了结构体数组、嵌套结构体、函数参数传递以及typedef简化等内容,并对比了结构体与联合体的区别。最后通过一个学生管理系统的综合示例展示了结构体的实际应用,总结了常见问题和注意事项。全文系统性地讲解了结构体的核心知识点,适合C语言学习
2025-02-07 23:50:46
960
原创 【重生之我在学习C语言编译与链接详解】
本文详细介绍了C语言程序的编译与链接过程,分为四个主要阶段:预处理(处理宏、头文件包含等)、编译(将C代码转为汇编代码)、汇编(生成机器码目标文件)和链接(合并目标文件与库生成可执行程序)。文章还通过示例说明了多文件项目的编译步骤,强调了链接器在解析函数调用和变量引用中的关键作用。最后总结了这些过程对理解程序运行机制的重要性。全文约150字概括了从源代码到可执行文件的完整转换流程。
2025-01-29 23:58:21
1142
原创 【重生之我在学习C语言指针详解】
本文系统介绍了C语言中指针的核心概念与使用方法。主要内容包括:指针基础(内存地址、指针变量声明、取地址&与解引用*运算符)、指针运算(加减、关系运算)、指针与数组的关系、指针在函数中的应用(参数传递与返回值)、高级指针应用(指针数组、多级指针、函数指针)以及使用注意事项(野指针、内存泄漏等)。指针作为C语言的精髓,能实现对内存的直接操作,是编写高效灵活程序的关键。文章通过丰富的代码示例帮助读者深入理解指针机制,并强调指针的正确使用方式,为C语言学习提供了重要参考。
2025-01-29 23:40:20
1009
原创 【C语言----函数详解】
本文系统介绍了C语言中函数的基本概念和使用方法。主要内容包括:函数的定义与声明,具体说明了返回类型、函数名、参数列表和函数体等组成部分;函数的调用方式及参数传递(值传递和地址传递);函数的返回值机制;递归函数的原理与应用;以及函数指针的定义和使用。文章强调函数作为代码模块化的重要工具,能够提高程序的可读性和可维护性,是C语言编程中的核心概念。通过实例代码展示了各类函数的实际应用,帮助读者全面掌握函数的使用技巧。
2025-01-28 21:41:16
770
原创 【C语言----数组详解】
本文系统介绍了C语言中数组的基本概念和使用方法。主要内容包括:数组的定义和特点(有序存储相同类型元素);声明和初始化的语法规则;通过下标访问元素的方式;使用for/while循环遍历数组;数组在数据存储、字符串处理、函数传参等方面的应用;多维数组(如二维数组)的声明和访问方法。文章强调数组是C语言编程中重要的数据结构,掌握其使用对于编写高效代码至关重要,并提供了完整的示例代码帮助理解。
2025-01-28 21:33:19
1063
原创 C语言走向新世界:手撕扫雷
这篇文章介绍了如何用C语言实现一个简单的扫雷游戏。主要分为三个文件:game.h(函数声明和宏定义)、game.c(函数实现)和test.c(主程序)。关键内容包括:使用rand()和srand()生成随机雷区,通过二维数组表示棋盘,实现初始化、显示、设置雷、计算周围雷数等功能。游戏流程包括菜单选择、坐标输入判定、胜负判断等。代码展示了完整的扫雷游戏实现过程,包括棋盘初始化(InitBoard)、显示(DisplayBoard)、布雷(SetMine)、排雷(FindMine)等核心功能,最后通过主程序运行
2024-09-21 20:50:56
2086
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人