2024年9月8日

C++17: 用折叠表达式实现一个IsAllTrue函数

摘要: 前言 让我们实现一个 IsAllTrue 函数,支持变长参数,可传入多个表达式,必须全部计算为true,该函数才返回true。 本文记录了逐步实现与优化该函数的思维链,用到了以下现代C++新特性知识,适合对C++进阶知识有一定了解的人。这样一种从实际问题来学习和运用知识的过程还是挺有趣的,特此整理分 阅读全文

posted @ 2024-09-08 22:40 七昂的技术之旅 阅读(219) 评论(0) 推荐(1) 编辑

2024年8月7日

C++ std::shared_ptr自定义allocator引入内存池

摘要: 当C++项目里做了大量的动态内存分配与释放,可能会导致内存碎片,使系统性能降低。当动态内存分配的开销变得不容忽视时,一种解决办法是一次从操作系统分配一块大的静态内存作为内存池进行手动管理,堆对象内存分配时从内存池中分配一块类对象大小的内存,释放时并不实际将内存归还给操作系统,而是交给自定义的内存管理 阅读全文

posted @ 2024-08-07 01:09 七昂的技术之旅 阅读(142) 评论(0) 推荐(0) 编辑

2024年6月30日

C++ : 如何用C语言实现C++的虚函数机制?

摘要: 前言 在 googletest的源码中,看到gtest-matchers.h 中实现的MatcherBase 类自定义了一个 VTable,这种设计实现了一种类似于C++虚函数的机制。C++中的虚函数机制实质上就是通过这种方式实现的,本文用c语言自定义虚函数表VTable实现了一下virtual的功 阅读全文

posted @ 2024-06-30 21:27 七昂的技术之旅 阅读(78) 评论(0) 推荐(0) 编辑

2024年6月27日

C++: 16个基础的C++代码性能优化实例

摘要: 前言 近期推动项目屎山代码进行了一波性能优化,实现了较大的性能提升。这里记录了部分近期代码优化的小技巧,这些例子仅从C++语言层面进行优化,主要在于优化类设计、减少隐含函数调用、减少拷贝等,较为基础实用,但涉及的知识点并不少。本文提供了一个视角,可以帮助了解一些C++代码的不同写法性能开销差异。对于 阅读全文

posted @ 2024-06-27 00:29 七昂的技术之旅 阅读(339) 评论(0) 推荐(0) 编辑

2024年6月7日

C++ : 仅添加一个引用& 就直接导致程序崩溃

摘要: 问题描述 在项目某次开发中,测试过程中出现了coredump问题。经过asan工具检测,报了heap-use-after-free内存错误,最终定位到竟是无意中添加了一个引用&导致的! 开发时因为看到相关类访问类成员的接口函数未返回引用,而是返回了一个拷贝,因此想着要将返回值改为引用,避免多余的拷贝 阅读全文

posted @ 2024-06-07 00:24 七昂的技术之旅 阅读(70) 评论(0) 推荐(0) 编辑

C++: 如何高效地往unordered_map中插入key-value

摘要: C++: unordered_map 花式插入key-value的5种方式 前言 无意中发现std::unordered_map、std::map等插入key-value对在C++17后竟有了 insert() 、operator[] 、 emplace() 、 try_emplace() 和 in 阅读全文

posted @ 2024-06-07 00:23 七昂的技术之旅 阅读(250) 评论(0) 推荐(0) 编辑

2024年3月31日

C++: 虚函数,一些可能被忽视的细节

摘要: C++: 虚函数,一些可能被忽视的细节 引言:关于C++虚函数,对某些细节的理解不深入,可能导致我们的程序无法按预期结果运行,或是表明我们对其基本原理理解不够透彻。本文详细解答以下几个问题:实现多态,忘记写virtual会怎么样?虚函数的默认参数可以重载吗?纯虚函数真的不能有实现吗?析构函数可以是纯 阅读全文

posted @ 2024-03-31 13:45 七昂的技术之旅 阅读(77) 评论(0) 推荐(0) 编辑

2024年1月19日

C++ vector 访问元素用 at 和 [] 有什么区别?

摘要: C++ vector 访问元素用 at and [] 有什么区别? 前言: 最近同事开发过程遇到了一个奇怪的coredump问题,崩溃位置和提交改动没有任何关系,看了几小时后来才发现原来是vector越界访问了,使用了[]越界访问元素。在此,记录一下at()和[]的区别,便于日后可以更快速地定位问题 阅读全文

posted @ 2024-01-19 00:06 七昂的技术之旅 阅读(341) 评论(0) 推荐(0) 编辑

2024年1月14日

为什么C++ 单例局部static初始化是线程安全的?

摘要: 为什么C++ 单例局部static初始化是线程安全的? const bg::AppSettings& bg::AppSettings::GetInstance() { static AppSettings instance; return instance; } 对于以上单例模式代码,在 C++11 阅读全文

posted @ 2024-01-14 19:24 七昂的技术之旅 阅读(249) 评论(0) 推荐(0) 编辑

2024年1月13日

C++源码中司空见惯的PIMPL是什么?

摘要: 前言: C++源码中司空见惯的PIMPL是什么?用原始指针、std::unique_ptr和std::shared_ptr指向Implementation,会有什么不同?优缺点是什么?读完这篇文章,相信你能搞懂这种设计方式并将其运用于实践,也将更容易阅读源码。 1. PIMPL是什么? PIMPL是 阅读全文

posted @ 2024-01-13 22:51 七昂的技术之旅 阅读(231) 评论(0) 推荐(0) 编辑

导航