首页
文章列表
标签墙
返回找工具啦
C++
共 73 篇文章
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++
智能指针
内存管理
53
0
C++虚函数表在多重继承下的内存布局与指针调整
2026-04-22 22:21:39
C++虚函数表在多重继承下的内存布局与指针调整 理解 C++ 多重继承下的内存布局是深入掌握对象模型的关键。在单一继承中,对象内存通常只包含一个虚函数表指针(vptr),但在多重继承下,情况会变得复杂:一个对象可能包含多个 vptr,且基类指针与派生类指针之间的转换会涉及内存地址的偏移调整。本文将深
C++
多重继承
虚函数表
56
0
C++ constexpr函数在编译期与运行期的执行边界
2026-04-22 11:17:01
C++ constexpr函数在编译期与运行期的执行边界 理解 C++11引入的constexpr函数是现代C++编程的重要特性,它允许函数在编译期计算结果,提高程序运行效率。但constexpr函数并非总是在编译期执行,其执行边界由多种因素决定。 编译期执行条件 检查 constexpr函数在以下
C++
constexpr
编译期
42
0
C++右值引用与左值引用在模板推导中的类型折叠
2026-04-22 09:13:56
C++右值引用与左值引用在模板推导中的类型折叠 引用折叠是 C++ 模板编程中决定最终类型的核心机制。当一个引用类型(如 T& 或 T&&)与另一个引用类型结合时,编译器会按照特定规则将它们“折叠”成一个单一的引用类型。 区分 左值与右值。左值通常是有名字、可以取地址的对象;右值通常是临时对象、字面
C++
右值引用
左值引用
52
0
C++ std::thread局部存储thread_local的生命周期
2026-04-22 04:18:33
threadlocal 关键字在 C++11 中引入,用于声明线程局部存储(ThreadLocal Storage, TLS)对象。这意味着每个线程都拥有该对象的独立副本,互不干扰。理解其生命周期——即何时构造、何时销毁——是编写高并发、无数据竞争程序的关键。 以下是指引。 C++ std::thr
C++
多线程
线程局部存储
52
0
C++ lambda表达式捕获变量的生命周期问题
2026-04-21 18:27:43
C++ lambda表达式捕获变量的生命周期问题 Lambda 表达式是现代 C++ 开发中不可或缺的工具,但“捕获变量”的生命周期管理是导致程序崩溃的常见原因。理解捕获机制本质,是编写稳定并发代码和回调函数的关键。 1. 理解两种基本的捕获模式 在使用 Lambda 时,必须清楚捕获列表 中变量的
C++
Lambda表达式
捕获变量
44
0
C++ consteval立即函数强制编译期求值的应用
2026-04-21 12:13:57
C++ consteval立即函数强制编译期求值的应用 consteval 是 C++20 引入的关键字,用于修饰“立即函数”。它的核心作用是强制编译器在编译阶段计算函数的结果,如果无法在编译期完成求值,编译将直接报错。这比 constexpr 更为严格,能够确保代码的绝对性能,并将计算压力从运行时
C++
C++20
立即函数
57
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
44
0
C++智能指针enable_shared_from_this的循环引用解决
2026-04-21 00:20:09
C++智能指针enablesharedfromthis的循环引用解决 在C++开发中,使用 std::sharedptr 管理对象生命周期时,常遇到两个核心痛点:如何在类成员函数中安全地获取指向当前对象的 sharedptr,以及如何由此引发的循环引用导致内存泄漏问题。直接传递 this 指针会导致
C++
智能指针
循环引用
54
0
C++ std::unique_ptr数组特化版的管理动态数组
2026-04-20 11:23:03
C++ std::uniqueptr数组特化版的管理动态数组 管理原始动态数组需要成对使用 new 和 delete,稍有疏忽极易导致内存泄漏或未定义行为。std::uniqueptr 的数组特化版 std::uniqueptr<T 提供了一种零开销、自动管理内存的机制,能够在指针离开作用域时自动调
C++
智能指针
动态数组
37
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++
智能指针
内存管理
51
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++
多线程编程
原子操作
50
0
C++ std::unique_ptr自定义删除器管理非内存资源
2026-04-19 09:25:21
C++ std::uniqueptr自定义删除器管理非内存资源 std::uniqueptr 默认使用 delete 或 delete 释放内存。但在处理文件句柄 FILE、网络套接字、Windows 句柄 HANDLE 或数据库连接等非内存资源时,默认操作无效或会导致程序崩溃。通过自定义删除器,可
C++
智能指针
自定义删除器
55
0
C++ std::variant的std::holds_alternative类型检查
2026-04-19 08:19:00
std::variant 是 C++17 标准库中提供的一个类型安全的联合体容器,它能在同一时刻存储多种指定类型中的某一种。在使用该容器时,经常需要判断当前存储的具体数据类型,std::holdsalternative 就是专门用于执行此操作的函数。 1. 引入 必要的头文件 在使用前,确保 代码文
C++
C++17
variant
39
0
C++ lambda 表达式:匿名函数的使用场景
2026-04-19 07:23:49
C++ lambda 表达式:匿名函数的使用场景 C++ lambda 表达式(匿名函数)是 C++11 引入的一个强大特性,它允许你在需要函数的地方直接定义函数,而无需单独命名。这种写法不仅让代码更加紧凑,还能显著提高代码的可读性和维护性。以下指南将详细拆解 lambda 表达式的语法结构,并通过
C++
Lambda表达式
匿名函数
65
0
C++ STL 容器:vector、list、map 的使用
2026-04-18 19:24:25
C++ STL 容器:vector、list、map 的使用 C++ 标准模板库(STL)提供了三种最核心的容器:vector(动态数组)、list(双向链表)和 map(映射)。掌握它们的使用是编写高效 C++ 代码的基础。以下指南将直接展示如何在代码中应用它们,涵盖定义、增删改查及适用场景。 1
C++
STL
容器
52
0
C++ 移动构造函数在容器扩容时的调用时机
2026-04-18 05:18:00
C++ 移动构造函数在容器扩容时的调用时机 在使用 std::vector 等 STL 容器时,随着元素数量增加,容器容量耗尽后会自动进行扩容。扩容过程中,容器需要将旧内存中的元素转移到新内存中。此时,移动构造函数的调用行为直接影响程序的性能。 1. 准备演示环境:编写可追踪的测试类 为了直观地观察
C++
移动构造函数
容器扩容
46
0
C++ 性能问题:拷贝构造函数调用频繁
2026-04-17 23:15:30
C++ 性能问题:拷贝构造函数调用频繁 C++ 程序运行缓慢,往往不是因为算法复杂,而是因为在不知不觉中进行了大量的内存拷贝。每当一个对象被赋值给另一个对象、作为参数传入函数或从函数返回时,如果处理不当,就会触发拷贝构造函数。对于包含大量数据(如 std::vector 或大数组)的对象,这会带来巨
C++
性能优化
拷贝构造函数
47
0
C++ 模板:函数模板与类模板的使用
2026-04-16 18:20:10
C++ 模板是泛型编程的核心,允许你编写与数据类型无关的代码。这意味着你可以定义一套逻辑,让它同时适用于整数、浮点数甚至自定义对象,而无需重复编写多份相似的代码。本文将带你掌握函数模板与类模板的核心用法。 一、 函数模板:自动适应不同类型的函数 函数模板用于定义一个通用的函数,该函数可以接受多种类型
C++
模板
函数模板
55
0
C++ 多线程同步std::mutex与std::lock_guard
2026-04-15 18:27:58
在多线程编程中,当多个线程同时访问共享数据时,会导致数据竞争,从而引发程序崩溃或产生错误结果。为了解决这一问题,C++ 标准库提供了 std::mutex(互斥锁)和 std::lockguard(锁管理器)。本文将详细介绍如何使用这两个工具来实现线程安全。 理解核心概念 std::mutex 是一
C++
多线程
线程同步
72
0
上一页
1
2
3
4
下一页