首页
文章列表
标签墙
返回找工具啦
C++
共 79 篇文章
C++智能指针std::shared_ptr控制块内存布局分析
2026-04-26 15:16:39
C++智能指针std::sharedptr控制块内存布局分析 std::sharedptr 的核心在于引用计数机制,而这个机制的物理载体就是“控制块”。深入理解控制块的内存布局,有助于优化程序性能并避免潜在的内存问题。 1. 理解控制块的基本构成 控制块并不是存储在 std::sharedptr 对
C++
智能指针
控制块
72
0
C++ std::variant的std::monostate作为默认无值状态
2026-04-26 05:14:59
C++ std::variant的std::monostate作为默认无值状态 C++17 引入了 std::variant,作为类型安全的 union 替代品。然而,与可以指向 nullptr 的指针或具有 std::nullopt 的 std::optional 不同,std::variant
C++
C++17
stdvariant
80
0
C++ std::shared_ptr的owner_before在弱排序中的使用
2026-04-26 02:23:04
C++ std::sharedptr的ownerbefore在弱排序中的使用 C++ 标准库中的智能指针 std::sharedptr 提供了自动内存管理功能,但在将其作为关联容器(如 std::set 或 std::map 的键)的元素时,直接使用默认的排序规则往往会引发意料之外的逻辑错误,特别是
C++
智能指针
弱排序
66
0
C++ std::expected作为std::optional的错误处理增强
2026-04-25 21:24:24
C++ std::expected作为std::optional的错误处理增强 使用 std::optional 处理可能失败的操作时,虽然能表达“无值”状态,但无法传递“为什么失败”的具体信息。std::expected C++23 解决了这一问题,它在同一个对象中封装了预期的成功值或错误对象,兼
C++23
expected
optional
67
0
C++ std::function类型擦除与虚函数开销对比
2026-04-25 19:17:51
C++ std::function类型擦除与虚函数开销对比 在 C++ 性能优化的过程中,选择正确的多态实现方式至关重要。本文将通过实际代码测试,对比传统虚函数与 std::function 的性能差异,并揭示其背后的内存与CPU开销机制。 1. 搭建性能测试环境 为了准确测量调用开销,我们需要创建
C++
性能优化
std::function
64
0
C++ constexpr和const的区别:编译期常量与运行时常量
2026-04-25 02:19:25
C++ constexpr和const的区别:编译期常量与运行时常量 在C++编程中,const 和 constexpr 都用于定义“不可变”的量,但它们在初始化时机、编译器处理方式以及应用场景上存在本质区别。掌握这两者的差异,是编写高效C++代码的关键。 1. 理解 const:运行期与编译期的双
C++
const
编译期
79
0
C++智能指针make_shared比直接new+shared_ptr好在哪
2026-04-24 23:28:22
C++智能指针makeshared比直接new+sharedptr好在哪 C++11 引入了智能指针来管理动态内存,std::sharedptr 是最常用的一种。但在创建 std::sharedptr 时,直接使用 new 和使用 std::makeshared 存在显著差异。以下是详细的对比分析与
C++
智能指针
内存管理
99
0
C++虚函数表在多重继承下的内存布局与指针调整
2026-04-22 22:21:39
C++虚函数表在多重继承下的内存布局与指针调整 理解 C++ 多重继承下的内存布局是深入掌握对象模型的关键。在单一继承中,对象内存通常只包含一个虚函数表指针(vptr),但在多重继承下,情况会变得复杂:一个对象可能包含多个 vptr,且基类指针与派生类指针之间的转换会涉及内存地址的偏移调整。本文将深
C++
多重继承
虚函数表
94
0
C++ constexpr函数在编译期与运行期的执行边界
2026-04-22 11:17:01
C++ constexpr函数在编译期与运行期的执行边界 理解 C++11引入的constexpr函数是现代C++编程的重要特性,它允许函数在编译期计算结果,提高程序运行效率。但constexpr函数并非总是在编译期执行,其执行边界由多种因素决定。 编译期执行条件 检查 constexpr函数在以下
C++
constexpr
编译期
60
0
C++右值引用与左值引用在模板推导中的类型折叠
2026-04-22 09:13:56
C++右值引用与左值引用在模板推导中的类型折叠 引用折叠是 C++ 模板编程中决定最终类型的核心机制。当一个引用类型(如 T& 或 T&&)与另一个引用类型结合时,编译器会按照特定规则将它们“折叠”成一个单一的引用类型。 区分 左值与右值。左值通常是有名字、可以取地址的对象;右值通常是临时对象、字面
C++
右值引用
左值引用
85
0
C++ std::thread局部存储thread_local的生命周期
2026-04-22 04:18:33
threadlocal 关键字在 C++11 中引入,用于声明线程局部存储(ThreadLocal Storage, TLS)对象。这意味着每个线程都拥有该对象的独立副本,互不干扰。理解其生命周期——即何时构造、何时销毁——是编写高并发、无数据竞争程序的关键。 以下是指引。 C++ std::thr
C++
多线程
线程局部存储
75
0
C++ lambda表达式捕获变量的生命周期问题
2026-04-21 18:27:43
C++ lambda表达式捕获变量的生命周期问题 Lambda 表达式是现代 C++ 开发中不可或缺的工具,但“捕获变量”的生命周期管理是导致程序崩溃的常见原因。理解捕获机制本质,是编写稳定并发代码和回调函数的关键。 1. 理解两种基本的捕获模式 在使用 Lambda 时,必须清楚捕获列表 中变量的
C++
Lambda表达式
捕获变量
86
0
C++ consteval立即函数强制编译期求值的应用
2026-04-21 12:13:57
C++ consteval立即函数强制编译期求值的应用 consteval 是 C++20 引入的关键字,用于修饰“立即函数”。它的核心作用是强制编译器在编译阶段计算函数的结果,如果无法在编译期完成求值,编译将直接报错。这比 constexpr 更为严格,能够确保代码的绝对性能,并将计算压力从运行时
C++
C++20
立即函数
94
0
C++ std::format格式化字符串替代printf的类型安全优势
2026-04-21 10:17:54
C++ std::format格式化字符串替代printf的类型安全优势 C++20 引入的 std::format 库旨在彻底解决 C 风格 printf 函数家族在类型安全上的历史遗留问题。printf 依赖格式字符串(如 %d, %s)来解析参数,一旦格式符与实际参数类型不匹配,程序便会表现出
C++
C++20
std::format
80
0
C++智能指针enable_shared_from_this的循环引用解决
2026-04-21 00:20:09
C++智能指针enablesharedfromthis的循环引用解决 在C++开发中,使用 std::sharedptr 管理对象生命周期时,常遇到两个核心痛点:如何在类成员函数中安全地获取指向当前对象的 sharedptr,以及如何由此引发的循环引用导致内存泄漏问题。直接传递 this 指针会导致
C++
智能指针
循环引用
98
0
C++ std::unique_ptr数组特化版的管理动态数组
2026-04-20 11:23:03
C++ std::uniqueptr数组特化版的管理动态数组 管理原始动态数组需要成对使用 new 和 delete,稍有疏忽极易导致内存泄漏或未定义行为。std::uniqueptr 的数组特化版 std::uniqueptr<T 提供了一种零开销、自动管理内存的机制,能够在指针离开作用域时自动调
C++
智能指针
动态数组
73
0
C++ std::unique_ptr的release后手动delete的安全风险
2026-04-20 03:20:25
C++ std::uniqueptr的release后手动delete的安全风险 std::uniqueptr 是 C++11 引入的智能指针,旨在通过 RAII(资源获取即初始化)机制自动管理内存,防止内存泄漏。然而,release 成员函数的存在提供了一种逃离自动管理的机制。如果在调用 rele
C++
智能指针
内存管理
86
0
C++ std::atomic的load/store操作与memory_order选择
2026-04-19 11:27:16
C++ std::atomic的load/store操作与memoryorder选择 多线程编程中,数据竞争是导致程序崩溃或产生不可预测结果的元凶。C++11 引入的 std::atomic 是解决这一问题的核心工具,它能保证对变量的操作是不可分割的。然而,仅仅使用原子变量并不一定能保证正确的线程同
C++
多线程编程
原子操作
114
0
C++ std::unique_ptr自定义删除器管理非内存资源
2026-04-19 09:25:21
C++ std::uniqueptr自定义删除器管理非内存资源 std::uniqueptr 默认使用 delete 或 delete 释放内存。但在处理文件句柄 FILE、网络套接字、Windows 句柄 HANDLE 或数据库连接等非内存资源时,默认操作无效或会导致程序崩溃。通过自定义删除器,可
C++
智能指针
自定义删除器
113
0
C++ std::variant的std::holds_alternative类型检查
2026-04-19 08:19:00
std::variant 是 C++17 标准库中提供的一个类型安全的联合体容器,它能在同一时刻存储多种指定类型中的某一种。在使用该容器时,经常需要判断当前存储的具体数据类型,std::holdsalternative 就是专门用于执行此操作的函数。 1. 引入 必要的头文件 在使用前,确保 代码文
C++
C++17
variant
84
0
上一页
1
2
3
4
下一页