自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 qt多线程网络踩坑记录

谁的孩子谁抱走”。断绝父子关系:跨线程的初始化建议传nullptr,避免复杂的上下文检查。防野指针:持有跨线程对象的指针时,务必使用QPointer。同步退出:使用配合合理的信号链,确保“人走茶凉”(对象销毁后再关线程),避免内存泄漏或 Crash。

2025-12-21 19:16:53 632

原创 红黑树底层原理拆解

学习数据结构,最忌讳陷入代码细节的泥潭。新手看到的是和。高手看到的是 2-3-4 树的分裂(Split)与合并(Merge)。下次面试被问到红黑树时,试着在脑海里画一棵 2-3-4 树。你不仅能轻松推导出所有规则,还能给面试官讲讲这背后的数学同构之美——这才是真正的“内功”。

2025-12-07 20:56:40 702 4

原创 【c++】使用友元函数重载运算符

友元函数重载运算符的必要性主要体现在流运算符(<<和>>)的重载中。主要原因包括:1)解决访问权限问题,友元函数可直接访问类的私有成员;2)保持参数顺序的灵活性,使语法更自然(如cout<<obj);3)支持操作数的对称处理,实现隐式类型转换;4)流运算符的特殊性要求左操作数必须是流对象。此外,友元函数遵循最小权限原则,既保持了封装性,又能实现标准库一致的接口设计。因此,在需要访问私有数据或保持自然语法时,使用友元函数重载运算符是最佳选择。

2025-12-01 17:52:28 551 1

原创 C++运算符重载:从本质到实践

C++运算符重载是一种让自定义类型支持标准运算符语法的特性,本质上是特殊的函数重载。它支持算术、关系、逻辑等大多数运算符的重载,可通过成员函数或全局函数实现。最佳实践包括保持语义一致性、合理选择返回值类型和处理常量性。在容器类如List中,常用于重载赋值、下标和流运算符。使用时需避免过度重载,注意性能影响,并遵循三/五法则。运算符重载能显著提升代码可读性和表达力,是C++面向对象编程的重要工具。

2025-12-01 17:51:22 814 2

原创 LRU缓存淘汰算法详解与C++实现

LRU(Least Recently Used)最近最少使用算法是一种常用的缓存淘汰策略。当缓存空间不足时,它会优先淘汰最久未被访问的数据,保留最近被访问的数据。LRU缓存算法通过结合哈希表的快速查找和双向链表的顺序维护,实现了高效的缓存管理。这种设计模式在需要快速访问最近使用数据的场景中非常有用,是现代计算机系统中不可或缺的基础组件之一。优点时间复杂度优秀(O(1))符合局部性原理实现相对简单缺点需要维护额外的数据结构内存开销较大(哈希表+链表)对于某些特殊访问模式可能不是最优。

2025-11-13 22:50:04 1420 2

原创 【c++】手撕单例模式线程池

这是一个轻量级的C++线程池实现,用于学习和理解多线程编程的核心概念。项目通过单例模式实现了一个可复用的线程池,支持任意类型任务的并发执行。

2025-11-11 22:29:00 724

原创 【c++ qt】QtConcurrent与QFutureWatcher:实现高效异步计算

本文探讨了Qt中处理耗时操作的异步编程方案。通过QtConcurrent和QFutureWatcher实现非阻塞UI线程,解决计算密集型任务导致的界面冻结问题。文章详细介绍了QtConcurrent的基本用法、参数传递和静态方法调用,以及使用QFutureWatcher监控异步操作状态和进度。最后以颜色提取为实战案例,展示了完整的异步实现方案,包括线程安全的静态方法、取消操作和结果处理机制。这种模式能显著提升GUI应用的响应性,适用于图像处理、数据分析等耗时操作场景。

2025-10-28 18:07:06 1194

原创 【C++】随机数生成的艺术:从真伪随机数到高性能

C++中的随机数生成最佳实践:真伪随机数结合使用。文章对比了真随机数(基于物理熵源)和伪随机数(确定性算法)的特性,推荐使用std::random_device获取种子配合std::mt19937梅森旋转算法的组合方案。这种架构兼具高质量随机性(长周期623维均匀分布)和高性能(避免频繁系统调用),同时支持多种概率分布。最佳实践包括:单次初始化生成器、测试时使用固定种子、正确选择分布类型等。性能测试显示该方案在保持优秀随机质量的同时,速度接近传统rand()函数,是C++11及以后版本的理想选择。

2025-10-23 16:55:52 1086

原创 【Qt】元对象系统:从实际开发中看QML/C++交互原理

本文深入解析Qt元对象系统在QML与C++交互中的关键作用,以FavoriteManager类为例展示了五大核心技术:1)Q_OBJECT宏激活元对象系统;2)Q_PROPERTY实现声明式属性;3)Q_INVOKABLE暴露C++方法给QML;4)信号槽机制实现跨语言事件通信;5)完整交互示例。通过剖析属性绑定、方法调用和信号触发的底层机制,揭示了Qt元对象系统如何实现高效的双向通信,为构建复杂QML应用提供技术支撑。

2025-10-17 12:55:04 904 1

原创 解决GitHub大文件推送错误:彻底清理PDB文件并配置.gitignore

本文针对GitHub推送失败问题,详细分析了因PDB文件过大导致推送被拒的原因,并提供了系统化解决方案。首先通过创建智能的.gitignore文件防止问题再次发生,然后使用git filter-branch命令彻底清理历史记录中的大文件。文章还深入探讨了.gitignore文件的工作原理和配置技巧,强调其在项目管理中的核心价值。最后总结了关键经验:预防优于治疗、了解构建输出、定期检查仓库健康。这些措施能有效维护Git仓库的整洁性,提高团队协作效率。

2025-10-07 17:33:36 1132 1

原创 【C++】深入理解const 成员函数

C++中的const成员函数是声明后加const关键字的类成员函数,其主要特性包括:1)承诺不修改对象状态(mutable成员除外),编译器会强制检查;2)允许常量对象调用;3)支持基于const性进行函数重载;4)可与mutable成员交互。使用const成员函数能增强代码安全性、明确设计意图、支持常量对象并促进良好类设计,但需注意避免滥用mutable。这类函数对非常量对象和常量对象具有不同的调用权限,是C++类型系统的重要安全特性。

2025-09-22 17:31:58 850 5

原创 【C++】lambda表达式类型相关问题

Lambda表达式的类型是编译器生成的唯一匿名闭包类型,类似于自动生成的函数对象类。即使两个Lambda代码完全相同,它们的类型也不相同,因为编译器会为每个Lambda生成独立类型。通常用auto或std::function存储Lambda,前者直接保留原始类型,后者包装兼容的可调用对象。这种设计保证了优化灵活性和类型安全,只有同一个Lambda的拷贝才会类型相同。

2025-09-22 17:20:45 665 2

原创 【C++】Lambda表达式参数问题

摘要: Lambda表达式参数列表在语法上几乎无限制,支持内置类型、自定义类型、指针/引用等,与普通函数类似。关键区别在于捕获列表:不能捕获静态变量,按值捕获默认为const(需mutable)。常见陷阱包括悬空引用和移动语义类型(如unique_ptr)需显式移动。C++14+支持auto参数和可变参数模板,C++20允许模板参数列表。核心注意事项:生命周期管理(避免捕获局部引用)和移动语义处理。

2025-09-22 17:16:00 1192

原创 【C++】类成员访问控制

本文深入解析C++访问控制机制,重点阐述private、protected和public三个关键字的使用场景与设计原则。private是默认选择,用于隐藏实现细节,保证数据安全;protected为继承设计,但需谨慎使用以避免破坏封装;public定义稳定接口,应保持最小化。核心设计准则包括:默认私有原则、审慎保护原则、最小公共接口原则和数据私有化原则。合理运用访问控制能有效提升代码的封装性、可维护性和安全性,是高质量C++程序的重要保障。

2025-09-17 22:13:21 978 6

原创 【C++】 深入理解C++虚函数表与对象析构机制

摘要:C++多态性通过虚函数表(vtable)实现,每个类拥有独立的vtable,子类会继承并修改父类的vtable。对象析构采用"先子后父"的顺序,基类需声明虚析构函数以确保派生类资源正确释放。析构过程先通过vptr动态定位析构函数,再静态调用父类析构,形成完整的析构链。理解这些机制对编写正确高效的C++代码和应对技术面试至关重要。(150字)

2025-09-17 22:03:26 1086 2

原创 【C++】浅谈智能指针

C++智能指针是管理动态内存的重要工具,主要包括unique_ptr、shared_ptr和weak_ptr三种类型。unique_ptr实现独占所有权,shared_ptr通过引用计数实现共享所有权,weak_ptr则用于解决shared_ptr的循环引用问题。智能指针遵循RAII原则,确保资源自动释放。创建时应优先使用make_unique/make_shared,避免直接new。shared_ptr通过控制块管理引用计数,而weak_ptr虽不增加强引用计数但参与弱引用计数,既解决循环引用又支持安全检

2025-09-15 17:54:10 1507 3

原创 【C++】左值、右值与移动语义

本文介绍了C++中的左值(lvalue)与右值(rvalue)概念及其应用。左值是有标识符、可寻址的持久对象,右值是临时的、匿名的值。重点讲解了移动语义(Move Semantics)的实现原理,通过右值引用"窃取"临时对象的资源,避免不必要的深拷贝。文章还对比了左值引用与指针的区别,并通过Qt C++示例展示了移动构造函数、std::move的实际应用场景,演示了如何高效处理大型对象和临时对象。这些特性显著提升了C++程序的性能表现。

2025-09-15 17:41:46 1279

原创 【http】状态码解析

HTTP 状态码是服务器响应客户端请求时返回的三位数字代码,分为五类:1xx(信息响应)表示请求已接收需继续处理;2xx(成功)表示请求已被成功处理;3xx(重定向)需要进一步操作完成请求;4xx(客户端错误)表示请求存在语法或权限问题;5xx(服务器错误)则表明服务器处理请求时失败。常见状态码包括200(成功)、404(未找到资源)、500(服务器内部错误)等,它们帮助开发者快速识别和解决问题。

2025-09-13 14:30:25 1077 2

原创 【C++】深入理解匿名函数

C++ Lambda表达式是便捷的匿名函数对象,本质由编译器生成唯一类类型。核心特性包括:1)通过捕获列表[]访问外部变量(值/引用捕获);2)语法简洁,适合STL算法;3)生命周期限于作用域,节省空间。值捕获创建变量副本,不受外部修改影响;引用捕获则同步变化。理解其函数对象本质和捕获机制对编写现代C++代码至关重要。

2025-09-12 14:48:38 750

原创 cmake构建的qt widget项目配置使用QtNetwork相关模块

将Qt6 Network模块添加到CMake项目的步骤:1)在CMake文件中添加两行独立代码find_package(Qt6 REQUIRED COMPONENTS Network)和target_link_libraries(mytarget PRIVATE Qt6::Network);2)若提示找不到Network库,需通过Qt安装工具安装该模块;3)重新构建项目后即可使用Qt Network相关头文件。注意保持两行代码分开书写。

2025-09-11 21:51:21 178 4

原创 【C++】单例模式的线程安全问题

单例模式的线程安全核心在于延迟初始化阶段的同步控制。非线程安全的经典实现可能因多线程同时通过空指针检查导致多次实例化。现代C++推荐使用局部静态变量(Meyer's Singleton),利用C++11标准保证的线程安全初始化特性,简洁高效地实现单例。此外,饿汉式在程序启动时初始化也能保证线程安全,但存在资源浪费和初始化顺序问题。综合来看,局部静态变量方案是最优选择,兼顾了线程安全、延迟初始化和代码简洁性。

2025-09-11 14:31:17 498 2

原创 【C++】智能指针的线程安全问题

C++智能指针的线程安全问题主要涉及std::shared_ptr、std::unique_ptr和std::weak_ptr。std::shared_ptr的控制块操作是原子且线程安全的,但对同一实例的写操作或访问指向对象时需要同步。C++20引入std::atomic<std::shared_ptr>支持原子操作。std::unique_ptr不允许共享,对同一实例的写操作需同步。std::weak_ptr的控制块操作是线程安全的,其lock()方法可安全获取对象所有权。总体而言,智能指针仅

2025-09-11 14:10:17 1087 1

原创 【C++】深入理解虚函数

本文介绍了面向对象编程的三大核心特性:封装、继承和多态。重点解析了多态的实现原理,包括动态多态(虚函数机制)和静态多态(函数重载等),详细说明了虚函数表(vtable)和虚函数指针(vptr)的工作机制。文章还探讨了纯虚函数的定义与使用场景,比较了纯虚函数与普通虚函数的区别,并分析了虚函数的内存布局。最后强调了构造函数不能为虚函数而析构函数应当设为虚函数的原因,总结了虚函数在实现灵活、安全的面向对象系统中的关键作用。

2025-09-11 13:25:23 1027

原创 【Qt C++】explicit 关键字

explicit关键字在C++中用于防止构造函数隐式转换,提高代码安全性。在标准C++中,它阻止单参数构造函数的意外转换;在Qt开发中尤为重要,能避免对象所有权意外转移和错误类型转换。Qt框架大量使用explicit,特别是在QObject派生类中确保父子关系正确,以及在QString、QVariant等包装类中控制类型转换。建议默认对单参数构造函数使用explicit,除非确实需要隐式转换,特别是Qt对象构造函数更应强制使用,以符合框架设计原则。explicit通过强制显式转换,使代码意图更清晰

2025-09-10 13:07:39 1351 2

原创 【Qt】元对象系统:深入解析与实战

Qt元对象系统核心解析 Qt元对象系统(Meta-Object System)是Qt框架的核心特性,通过扩展C++功能实现强大的运行时反射和对象间通信。系统由QObject基类、Q_OBJECT宏和元对象编译器(moc)组成,主要提供信号与槽机制、运行时类型信息、动态属性系统和反射能力。 关键实现包括: moc预处理器扫描头文件生成元对象代码 信号与槽实现类型安全的对象间通信 动态属性系统允许运行时添加/查询对象属性 反射机制支持运行时类型检查和转换 系统克服了C++原生RTTI的限制,为Qt框架提供了灵活

2025-09-09 16:49:41 1752 6

原创 【计算机操作系统】现代操作系统的进程内存分配

现代操作系统采用虚拟地址空间而非直接物理地址分配,主要为了兼顾安全稳定、高效性和灵活性。直接使用物理地址会导致进程间相互干扰、内存冲突、管理困难等问题。虚拟地址通过内存管理单元(MMU)实现地址转换,为每个进程提供隔离的连续内存空间,带来三大优势:1)安全隔离与访问保护;2)简化内存管理,支持共享内存;3)提高效率,通过分页机制解决碎片问题,支持交换空间扩展可用内存。这种设计如同为每个进程配备专属"管家",将虚拟地址映射到物理内存,既保证了进程独立性,又优化了资源利用。

2025-09-08 22:12:31 1255 2

原创 Qtpainter练手项目:仪表盘相关的坐标变换与绘图

本项目实现了一个基于Qt的动态速度表盘,使用QPainter进行图形绘制。主要功能包括:动态速度指针(0-240 km/h)、渐变色彩背景、精确刻度显示、高速警告区域以及中央数值显示。核心技术点涉及坐标系变换、三角函数计算刻度位置、径向渐变效果和定时器控制的指针动画。项目通过保存/恢复坐标系状态、抗锯齿渲染等技术优化绘制效果。代码结构清晰,包含画布初始化、刻度绘制、指针动画等模块。项目地址:https://github.com/1024freedom/Qt_dashboard,欢迎交流优化建议。

2025-09-07 18:48:38 848 2

原创 git push 疑难解决:使用更稳定SSH密钥替代https连接GitHub并推送代码

本文介绍了使用SSH密钥替代https连接GitHub的完整流程,以解决git push时的常见问题。首先通过ssh-keygen命令生成ED25519密钥对,然后将本地仓库关联到GitHub的SSH地址,使用ssh -T命令验证连接成功后,即可顺利推送代码。该方法相比https连接更加稳定可靠,能有效避免代理环境下的各种推送问题。文中详细说明了每个步骤的具体操作命令和注意事项,包括密钥生成、地址修改和连接验证等关键环节。

2025-09-05 22:59:01 652 1

空空如也

空空如也

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

TA关注的人

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