- 博客(105)
- 收藏
- 关注
原创 观察者模式
本文展示了观察者模式的C++实现,并对比了原始指针和智能指针两种实现方式。原始版本使用手动内存管理,存在内存泄漏风险;改进版本采用shared_ptr智能指针,通过make_shared创建对象,自动管理生命周期,消除了显式delete操作。两种实现都包含ObserverBase抽象基类、ObservedSubjectBase被观察者基类,以及具体观察者类XiaoZhang和XiaoLiu。智能指针版本更安全简洁,体现了现代C++的资源管理理念。
2026-05-19 22:48:10
34
原创 Static成员函数
本文总结了C++中static成员函数声明与实现的正确写法及常见错误。核心规则是:声明时必须加static,实现时不能加static。文章通过头文件和源文件的代码示例展示了标准写法,并解释了错误写法的编译报错原因。背后的设计逻辑是static在声明时标记函数归属类本身,而实现时通过类名限定已明确归属,再加static会造成重复标记。文章还补充了静态函数的访问权限、调用方式等注意事项,最后用口诀"声明带static,实现丢static,类名限定不能少"帮助记忆。理解编译器识别逻辑可避免死记
2026-05-12 10:10:21
361
原创 内存0xcdcdcdcd是咋会事儿?
【摘要】在C++开发中,Debug模式下常见的内存标记值0xcdcdcdcd是Visual Studio对未初始化堆内存的特殊标记。该值出现在四种典型场景中:1)new分配内存后未初始化;2)类对象未调用构造函数;3)指针解引用未初始化内存;4)类成员指针未初始化。这会导致逻辑错误或程序崩溃,尤其在Release模式下问题更隐蔽。解决方案包括:立即初始化new分配的内存、使用括号触发类对象初始化、在构造函数中初始化所有成员变量,以及启用内存检测工具。理解这些内存标记能帮助开发者快速定位和解决内存问题,建议养
2026-04-26 20:05:56
374
原创 C++——基础
值传递:在函数调用时,会触发一次参数的拷贝动作,所以对参数的修改不会影响原始的值。如果是较大的对象,复制整个对象,效率较低。引用传递:函数调用时,函数接收的就是参数的引用,不会触发参数的拷贝动作,效率较高,但对参数的修改会直接作用于原始的值。看两种传递方式的示例代码:值传递引用传递1.3 深入理解1.3.1什么场景下使用引用传递?避免不必要的数据拷贝:对于比较大的对象参数(比如std:vector、std:string、std:list),因为拷贝会导致大量的内存和时间开销。而引用传递可以避免这
2025-09-30 22:34:55
823
原创 某企业牛笔试题——写对了2个半
一、栈配对符号配对给定一个包含括号(()、[]、{})和其他字符(如数字)的字符串,判断其中的括号是否有效。有效括号需满足以下条件:每个左括号必须有对应的同类型右括号闭合。左括号必须以正确的顺序闭合(例如 ([)] 是无效的,而 ()[]{} 是有效的)。其他字符(如数字)不影响判断,可直接忽略。
2025-09-29 16:50:46
444
原创 VTK入门
优点:开源免费、兼容性极强、支持复杂数据结构、跨平台通用;缺点:ASCII 格式文件体积大,对于超大规模数据(如亿级网格),读写效率不如专用二进制格式(如 HDF5)。总之,VTK 格式凭借其通用性和灵活性,成为科学计算可视化领域的事实标准之一,尤其在 CFD/CAE 后处理中,是连接不同软件工具的重要桥梁。优点:开源免费、功能全面、算法成熟、跨平台、支持多语言,适合从简单可视化到复杂定制化工具的开发。缺点。
2025-08-24 00:39:05
1587
原创 C++——分布式
分布式” 是计算机科学和软件工程中的一个核心概念,指的是将一个大型系统或任务拆解为多个部分,通过多个独立的计算节点(如服务器、计算机)协同工作来完成,节点之间通过网络进行通信和协调。
2025-08-15 22:37:11
1168
原创 剑指offer第2版——面试题3:数组中重复的数字
哈希表法更通用,实现简单,适合大多数场景;二分查找法空间更优,但依赖题目特定条件(数字范围 0~n-1),是对 “利用隐含条件” 考点的延伸。两种方法均满足 “不改变原数组” 的要求,核心是在时间与空间复杂度之间做权衡。
2025-08-12 18:03:27
1061
原创 剑指offer第2版——面试题1:赋值运算符函数
异常安全性原则(Exception Safety Guarantees)是 C++ 中处理异常的重要设计准则,它定义了函数在发生异常时应保证的程序状态,确保即使出现异常(如内存分配失败、操作无效等),程序也不会出现资源泄漏、数据损坏或对象处于无效状态等问题。基本保证(Basic Guarantee):核心要求:当异常发生后,程序能保持有效状态(所有对象的不变式仍成立,资源未泄漏),但对象的具体状态可能不可预测(不一定是异常发生前的状态)。示例。
2025-08-07 22:01:59
1032
原创 C++——系统编程(Posix API)
POSIX API 的全称是 “Portable Operating System Interface for Unix”(可移植操作系统接口)。 它是由 IEEE 制定的一系列标准,定义了类 Unix 操作系统应提供的接口规范,包括系统调用、库函数等,目的是提高不同 Unix 类系统之间的兼容性和应用程序的可移植性。 遵循 POSIX 标准的系统(如 Linux、macOS、FreeBSD 等)提供的 API 具有高度一致性,使得遵循该标准编写的程序可以在这些系统上无需大量修改就能运行。C++ 系统编程中
2025-08-07 17:28:23
1201
原创 C++——并发编程
线程有且只有两种状态:结合状态和分离状态。在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。在默认情况下线程是可结合的(joinable),这种情况下,原有的线程等待创建的线程结束。只有当pthread_join()函数返回时,创建的线程才算终止,才能释放自己占用的系统资源。当
2025-08-06 20:17:33
1377
原创 Pimpl惯用法
将类的私有成员(数据和方法)从头文件移到实现文件中,用户只能看到接口,无法知晓具体实现。:头文件不再包含私有成员的定义,当实现细节变化时,依赖该类的代码无需重新编译。:类的二进制接口(ABI)更加稳定,即使内部实现变化,只要公共接口不变,链接时就不会出现问题。
2025-08-04 21:03:27
361
原创 C++——设计模式
面向对象的优点和缺点面向对象的三大特点设计模式的六大原则单例模式(线程安全)工厂方法模式适配器模式代理模式观察者模式策略模式备忘录模式模板模式状态模式责任链模式装饰模式命令模式
2025-08-04 20:08:03
1200
原创 Qt数据和视图分离——中MCV和MVVM
MVC 是一种非常流行的设计模式,广泛用于Web应用程序和桌面应用程序开发。通过将用户界面与业务逻辑清晰分离,MVC 提供了一个灵活和高效的开发方式,有助于构建可维护和可扩展的应用程序。MVVM(Model-View-ViewModel)是一种软件架构模式,主要用于构建用户界面,尤其在需要双向数据绑定的应用程序中非常常见。MVVM 模式通过分离关注点,提高了代码的可维护性和可测试性。它将应用程序分为三个主要组件:模型(Model)、视图(View)和视图模型(ViewModel)。MVVM。
2024-08-07 19:21:41
2336
1
原创 C++回顾——虚析构
虚析构函数的引入是为了确保在从基类指针删除派生类对象时能够正确调用派生类的析构函数,以便完成资源清理,维护程序的健壮性和安全性。通过这一机制,C++ 提供了一种可靠的方式来管理多态性带来的复杂性,增强了面向对象编程的灵活性和可维护性。
2024-08-01 15:53:08
765
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅