- 博客(49)
- 资源 (1)
- 收藏
- 关注
原创 指针这几个没用的判空,你做了吗?
好像智能指针出来后,裸指针变成了洪水猛兽,在项目里都敬而远之了,导致很多裸指针的知识点也就被束之高阁,但是我个人认为对于基础知识的深入了解才能走的更远,今天我也就斗胆抛砖引玉,梳理下裸指针的几个知识点,与大家共享。一旦涉及到内存分配动作,便有可能出现内存分配失败的情况,无论是抛出异常还是返回空指针都不能构建出对象,都会影响预定的实现逻辑。我们知道了delete空指针是安全的,所以需要注意,delete完指针后,一定要将指针制空,避免出现。后,就不会抛出异常了,执行了返回值为空的逻辑,保证了程序的健壮性。
2025-05-10 09:24:40
513
原创 6个设计模式不够用了,我又开始用它们两个了
原型模式(Prototype Pattern)是一种创建型设计模式,它通过复制现有的对象来创建新对象,而不是通过 new 或构造函数去创建。实现方式为提供clone()方法借助对象当前的实时数据来生成新的对象,而不是从头开始创建。状态模式(State Pattern)是一种行为型设计模式,其主要用于状态和行为强关联的场景中——状态的改变会影响对象的行为。状态模式将对象的行为封装在不同的状态类中,每个状态类都实现了相同的接口,这样就可以在运行时动态地改变对象的行为。
2025-04-11 09:35:11
694
原创 别再用Google Test了,试试CTest
如果你的项目使用CMake构建,CTest几乎是零成本集成的最佳选择。虽然市面上有许多优秀的测试框架,如Google Test、Catch2、Boost Test,但如果你的项目已使用CMake,CTest更为便捷。可惜的是,Gtest我只是了解过一点点,但是由于其需要依赖对应的库,对于项目来讲有些重,所以最终选择了CTest——CMake提供的测试工具。CTest除了上述的基础使用外,还有许多高级功能,包括测试用例的参数、依赖管理、并行执行、超时设置、标签分组等,下面将详细介绍这些功能。
2025-04-01 08:47:43
499
原创 回调函数实战解读:从 C/C++ 到现代 C++ 实现方案
回调函数是一种在 C++ 中广泛使用的技术,它允许将函数作为参数传递给其他函数,并在适当的时候被调用。回调函数在异步编程、事件驱动编程以及插件式架构中非常有用。本文介绍了回调函数的基本概念、使用方式以及注意事项,并提供了几个示例来帮助理解回调函数的使用。
2025-03-31 22:33:33
802
原创 C++性能优化神器:它 比 std::stoi 快 3 倍!
您好,我是昊天,国内某头部音频公司的C++主程,多年的音视频开发经验,熟悉Qt、FFmpeg、OpenGL。我最近在项目中遇到一个需求——针对同一个类型的接口,需要支持传入多种数据类型,大概形式如下,如果是C++接口,可以用重载用模板,但是我需要提供C接口,这些特性都用不了。虽然可以采用如下的方案:但是这样的话,每次有新的类型,都需要增加新的接口,每次增加新的接口,都意味着使用库的铜须需要重新编译、集成,这套方案显然是不成熟的。通过思考发现,我可以通过知晓的类型,所以可以考虑如下的方案:这样提供的接口
2025-03-31 22:30:09
352
原创 小技巧:动态库运行时加载
本文从基本概念、跨平台 C++ 实现,到常见问题及解决方案,详细剖析了动态库运行时加载的核心要点。掌握这一技术,不仅能提升软件开发效率,还能在实际项目中灵活应对各种复杂的动态库加载场景。
2025-02-11 12:57:54
858
原创 单例模式,真的非得用不可吗?
单例模式在很多场景下都能解决特定的问题,尤其是需要保证类的唯一性时。然而,它的缺点也不容忽视,特别是在全局状态管理、模块耦合、测试困难等方面。因此,在面对实际开发时,真的要好好思考下,这个类就非得写成单例模式不可吗,有没有的别的写法。
2025-01-24 14:46:46
587
原创 OBS新版的官方编译指导总是编不过,不过我找到了解决方法
本文介绍了如何从 GitHub 获取 OBS Studio 源代码、如何配置、编译、运行、调试 OBS Studio,为后边利用obs进行二次开发打下基础。本文仅仅算本专栏的小菜,后续才是本专栏的重点,敬请期待。
2025-01-22 09:08:21
811
原创 2025年了,中文乱码的问题仍然存在?
总的来说,中文乱码问题并非一个过时的话题,反而是日常开发中时常遇到的一个实际问题。在尽量避免使用中文的基础上,需要确保编码和解码的一致性,以确保字符的正确显示和处理,避免出现乱码的情况。
2025-01-21 20:50:50
618
原创 OBS Studio原来这样简单易用且功能强大
本文概述了OBS的核心功能和特性,并简单介绍了OBS的主界面和设置界面,简单科普了OBS的使用。但是本号并不会专门用来介绍工具的使用,本文是OBS系列专栏的开篇,为后边介绍OBS编程做准备,让我们一起期待。
2025-01-09 22:42:02
1421
原创 无论多么复杂的网络请求,只需要这7步就够了
相比之下,libcurl 提供了更为简洁的 API,能够快速上手,特别适合处理常见的 HTTP/HTTPS 请求,同时支持多种协议。libcurl是一个功能强大但是简单易用的网络请求库,能够帮助开发者轻松应对多种网络通信任务,故而成为了开发者的首选网络库。:libcurl 提供了丰富的 API 选项,允许开发者精确控制请求过程,如自定义请求头、设置代理、处理 SSL/TLS 加密、安全认证等,满足各种复杂需求。libcurl是一个跨平台、高效、灵活的网络库,支持多种常见的网络协议,能够帮助开发者轻松解决。
2025-01-01 22:02:30
765
原创 优雅的CPP——结构化绑定
结构化绑定是 C++17 中引入的一项强大特性,可以使代码更加简洁、清晰和灵活。通过结构化绑定,我们可以更方便地处理元组、数组、容器等数据结构,提高了代码的可读性和可维护性。然而,在使用结构化绑定时,需要注意生命周期、可变性和匹配数量等问题,以避免潜在的错误和不必要的麻烦。
2024-04-17 23:53:23
387
原创 std::optional:解决值存在性问题的利器
std::optional<T>作为一个模板类,用于管理一个可选的容纳值(此处与std::tuple还是有区别的,tuple可以容纳n个值),容纳值可以是自定义类型,甚至是另一个optional。可是通常这些魔幻值需要接口使用者遵守函数的约定,为接口的使用增加了复杂度,基于此C++17提出了std::optional,用于解决值可能存在也可能不存在的问题。如上代码几乎涵盖了optional常用的所有用法,如构造、初始化、赋值、判空、取值。使用std::optional优化如上代码,
2024-04-17 22:31:00
394
原创 [Modern CPP]内联变量——保证变量唯一性的利器
内联变量是 C++17 新增的特性,用于解决头文件中变量多实例化的问题。通过使用inline将变量声明为内联变量,可以确保在多个源文件中只有一个变量实例,避免了链接时的重定义错误。然而,仍需要谨慎使用内联变量,并注意其初始化和定义的位置,以确保程序的正确性和可维护性。
2024-04-15 09:20:57
387
原创 类型安全的瑞士军刀——std::variant
当需要在同一块内存区域中存储不同类型的值且在任何时刻只会存储其中的一种类型时,联合体(union)总是作为首要选择,但是联合体存在如类型安全差、不支持构造函数和析构函数等缺点。为避免union存在的问题,C++17引入一个非常实用且强大的新特性——std::variant。std::variant作为一个多形态的容器,可以容纳一组预定义类型的其中之一,任何时候它都只存储其中一个类型的有效值,提供了严格的类型安全保证。联合体通过.指定变量名进行变量存取,如下示例1。
2024-04-15 09:19:03
535
原创 我的2024年第2个月——慢即是快
2024年,我换打法了,不再一味的追求快速获得结果,里程碑式的结果是很难快速获得,不仅需要机缘的加持,还需要前瞻性的思考和果断的决策,而这些一则是可遇不可求,二则是需要长期积累。水滴石穿,虽慢但获得的结果却是惊人的,总之,贵在坚持——慢即是快。2月份正值春节期间,静下心来学习和写代码的时间减少,导致技术类的文章更新变少。但是这个月我新开了一个专栏用于书写自媒体实操经验。并且实操结果还不错,将在成果项中书写,不在此赘述。
2024-02-29 22:28:11
258
原创 C++20 格式化字符串
std::format 是 C++20 中引入的一个新功能,用于格式化字符串。它位于 头文件中,并提供了一种类似于 Python 中 f-string 的语法来构建格式化字符串。为实现自定义数据类型的格式化,需要为其提供格式化器,格式化器是标准的,可以参考如下进行修改即可。int x, y,z;// 定义一个格式化处理程序//outputstd::format提供类型安全且灵活的字符串格式化方法,使用时要牢记{}的个数不要大于变量的个数;
2024-02-28 12:51:03
802
原创 这才是面试官想听到的答案,C++er必须得看看
谁人不是面试官,谁人又何尝不是被面试者呢,将人问倒从来不是目的,了解他的知识面才是整个面试的根本意义。
2024-01-15 22:45:14
379
原创 【无标题】
C/C++程序员具有直接操作内存的权力,但这也对程序员提出高要求,尤其是要小心内存泄露。可是内存泄漏发生时,也不要怕,windows平台gflags和vs是分析内存泄露的上好工具。
2023-01-02 15:13:27
203
原创 QT封装的指针
C/C++程序员来讲,内存泄露是需要特别关注的点,但是QT提供智能指针,可以避免由于使用原生指针(忘记释放堆上内存)而带来的内存泄露。
2022-11-13 16:17:36
496
原创 QT实现同步异步转换QMetaObject::invokeMethod
如果用QT书写GUI的话,为不影响主界面的工作(不卡主界面),实现工作线程和GUI线程的调度,QT提供了很好的方法——QMetaObject::invokeMethod,并针对该函数提供了多个重载。
2022-11-13 11:25:35
2614
2
原创 cppcheck入门
书写完代码后,如果有工具可以检查代码中存在的未定义行为,对于程序员来讲,乃至对于整个软件开发流程来讲都是大有裨益的。而cppcheck就是好用的工具之一。cppcheck作为C/C++代码检查的利器,使用方便高效,本文作为一个入门篇章,可让读者快速上手。
2022-11-13 09:43:43
2817
原创 C++信号槽sigslot的无脑接入
Qt的信号槽是常用的,但是对于非GUI的部分,最好还是用纯C++的好些,毕竟如果需要将现有的代码直接作为SDK给第三方公司同事使用,还是纯C++的好些。基于此,了解到C++的一个信号槽类库——sigslot。
2022-11-12 17:05:28
445
原创 史上最全的QgraphicsEffect设置
史上最全的QgraphicsEffect设置废话不说,先看效果上图中针对同一幅图片分别添加了阴影、模糊、着色、透明度设置。QGraphicsBlurEffect,将图片或窗口模糊化,呈现失焦效果代码如下 QGraphicsBlurEffect* blur = new QGraphicsBlurEffect(this); blur->setBlurHints(QGraphicsBlurEffect::PerformanceHint);//设置模糊的性能参数,见下表 blu
2021-09-05 14:41:32
1550
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人