C++学习:六个月从基础到就业
文章平均质量分 95
大家好,我是一名研究生,本科期间已经学习过一学期的C++,但是C++知识点繁多、应用广泛,要想达到毕业的水平,需要旷日持久的学习。为了在半年到一年内达到就业水平,我决定系统性地深入学习C++,并记录这个过程。本博客系列将分享我的学习笔记、代码实践和遇到的问题,希望能与大家一起成长。
superior tigre
superior哥,985工科+一段大厂实习,本科期间曾参加多项A类机器人竞赛,获得国家级荣誉五项,省级荣誉四项,其中国家一等奖一项,国家二等奖一项,国家三等奖两项,获得软著专利五项。万仞高山,始足于稳——人比山高,脚比路长。欢迎各位的关注和喜欢,一起努力,共勉。GitHub和博客园上的名字叫:MrLyu9277
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++学习:六个月从基础到就业(导航目录)
这是我的C++学习之旅的开始。我将定期更新这个博客系列,分享我的学习进度和心得。如果你也在学习C++,欢迎一起交流讨论。在接下来的博客中,我将从C++基础语法回顾开始,逐步深入到更高级的主题!本博客系列将持续更新,每完成一个主题,我会在上面的目录中添加相应的链接。如果你有任何建议或问题,欢迎在评论区留言!原创 2025-03-22 19:51:02 · 1749 阅读 · 2 评论
-
C++学习:六个月从基础到就业——多线程编程:线程池实现
线程的创建和销毁是昂贵的操作,涉及到系统调用、内存分配和上下文切换等开销。频繁地创建和销毁线程会对应用程序性能产生显著影响,尤其在处理大量短期任务时。线程复用:预先创建线程并重复使用,避免频繁创建和销毁的开销控制并发度:限制并发线程数,防止系统资源耗尽任务管理:提供任务队列和调度机制,平衡工作负载异步处理:将任务提交与执行分离,提高响应性// 直接创建线程的方式++i) {// 模拟任务执行});t.join();// 使用线程池结果示意(实际代码稍后实现)原创 2025-05-22 16:36:21 · 950 阅读 · 0 评论 -
C++学习:六个月从基础到就业——多线程编程:Futures与异步任务
C++11的futures库为异步编程提供了更高层次的抽象,简化了多线程代码,减少了常见的同步错误。和如何协作传递异步结果std::async如何简化异步任务的创建和结果获取如何包装可调用对象,便于在线程间传递如何支持多个线程等待同一结果如何在异步任务中处理异常和超时实际应用中的最佳实践和常见陷阱C++20通过和停止标记进一步改进了异步编程模型,为任务取消和线程生命周期管理提供了更好的支持。掌握这些异步编程工具对构建高性能、可靠的多线程应用至关重要。原创 2025-05-21 13:47:03 · 1144 阅读 · 0 评论 -
C++学习:六个月从基础到就业——多线程编程:条件变量
条件变量是C++11中实现线程同步和通信的强大工具。总是与互斥量配合使用,保护共享状态使用谓词函数处理虚假唤醒先修改状态,再发送通知,避免丢失唤醒根据实际需求选择还是条件变量适用于生产者-消费者模式、线程池、屏障同步等多种并发场景。随着C++20引入信号量和锁存器,我们现在有了更丰富的同步工具选择。在下一篇文章中,我们将探讨和,它们为C++并发编程提供了基于任务的异步模型。这是我C++学习之旅系列的第五十六篇技术文章。查看完整系列目录了解更多内容。原创 2025-05-21 13:46:21 · 763 阅读 · 0 评论 -
C++学习:六个月从基础到就业——多线程编程:互斥量与锁
互斥量和锁是C++多线程同步的基础。合理使用std::mutex等工具,可以有效避免数据竞争和死锁问题。C++17/20引入的等进一步提升了并发性能和代码简洁性。在下一篇文章中,我们将继续学习条件变量(),它是实现线程间通信和同步的关键工具。这是我C++学习之旅系列的第五十五篇技术文章。查看完整系列目录了解更多内容。原创 2025-05-20 21:17:28 · 1161 阅读 · 0 评论 -
C++学习:六个月从基础到就业——多线程编程:std::thread基础
在这篇文章中,我们介绍了C++11的类及其基本用法,包括线程的创建、参数传递、生命周期管理以及常见问题。多线程编程是现代C++开发中不可或缺的一部分,掌握这些基础知识将为你构建高性能、响应迅速的应用程序奠定基础。线程创建与基本操作:使用创建线程,传递函数、函数对象或lambda表达式作为线程函数。参数传递:使用值传递、std::ref引用传递或移动语义传递参数到线程函数。线程管理:使用join()等待线程完成或detach()允许线程在后台运行。线程本地存储:使用关键字创建线程私有的变量。异常处理。原创 2025-05-20 16:54:05 · 2565 阅读 · 1 评论 -
C++学习:六个月从基础到就业——C++20:模块(Modules)与其他特性
/ 在std命名空间特化formatter模板template<>// 解析格式说明符if (it!// 格式化值// 更复杂的格式化控制template<>if (it!return it;return 0;C++20的模块系统与其他新特性标志着C++语言的重大演进。模块系统彻底改变了代码组织方式,解决了长期困扰C++开发者的头文件问题。原创 2025-05-19 08:58:38 · 1700 阅读 · 0 评论 -
C++学习:六个月从基础到就业——C++20:范围(Ranges)进阶
视图类:实现范围接口的具体视图视图适配器:创建视图的函数对象适配器工厂:提供用户友好的接口// 步进视图 - 每隔n个元素取一个private:public:// 迭代器类实现// ... 迭代器实现细节 ...// 包含current_、end_指针和stride_步长// 实现operator++, operator*, operator==等// 适配器函数对象// 支持管道语法 range | views::stride(n)原创 2025-05-19 08:57:44 · 1784 阅读 · 0 评论 -
C++学习:六个月从基础到就业——C++20:范围(Ranges)基础
迭代器对耦合:必须同时提供起始和结束迭代器// 必须提供两个迭代器错误风险:容易传递不匹配的迭代器对// 潜在风险:传递了不匹配的迭代器对// 未定义行为组合算法困难:算法间组合需要中间容器,代码冗长// 筛选});// 转换});返回值不便:许多算法返回迭代器,需要检查合法性if (it!= v.end()) { // 必须检查是否有效// 使用*it} else {// 未找到在C++20中,范围(Range)是一个抽象概念,表示元素序列。原创 2025-05-18 17:06:04 · 1177 阅读 · 0 评论 -
C++学习:六个月从基础到就业——C++20:协程(Coroutines)
协程(Coroutine)是一种特殊的函数,能够在执行过程中暂停并保存当前状态,稍后再从暂停的位置继续执行。这种能力使协程成为处理异步操作的强大工具。可暂停执行:协程可以在指定点暂停执行,并让出控制权状态保存:暂停时,协程的执行状态(包括局部变量和执行位置)被保存可恢复执行:协程可以从上次暂停的位置恢复执行多入口多出口:与传统函数的"单入口单出口"不同,协程可以有多个出口(暂停点)和入口(恢复点)协程 generate_sequence() {yield 1;// 产生值1并暂停。原创 2025-05-18 11:27:15 · 1024 阅读 · 0 评论 -
C++学习:六个月从基础到就业——C++20:概念(Concepts)
在C++20中,概念是编译时谓词,用于约束模板参数。template<参数列表>concept 概念名称 = 约束表达式;// 简单概念:检查类型是否是整数// 复合概念:检查类型是否是数值类型// 使用requires表达式的概念:检查类型是否可打印// 要求T可以被输出到流// 参数化概念:检查两个类型是否可进行某种操作{ t + u };// 要求T和U可以相加C++20引入的概念(Concepts)是现代C++最重要的特性之一,它彻底改变了我们编写和使用模板的方式。原创 2025-05-18 11:15:16 · 1155 阅读 · 0 评论 -
C++学习:六个月从基础到就业——C++17:string_view与filesystem
C++17引入的库是基于Boost.Filesystem库的标准化版本,它提供了一套跨平台的文件系统操作接口。在C++17之前,C++标准库并没有提供直接操作文件系统的功能,开发者不得不依赖平台特定的API或第三方库。库定义在头文件中,包含在命名空间内。路径表示和操作:提供了类来表示和操作文件路径文件状态查询:检查文件是否存在、类型、大小等目录遍历:迭代目录内容文件操作:创建、删除、重命名文件等权限管理:查询和修改文件权限符号链接处理:创建和解析符号链接空间查询:检查磁盘空间信息。原创 2025-05-18 11:08:18 · 1097 阅读 · 0 评论 -
C++学习:六个月从基础到就业——C++17:std::optional/variant/any
C++17引入了三个非常有用的工具类型:、和。这些类型为C++程序员提供了更安全、更灵活的数据处理方式,弥补了C++标准库中的一些长期存在的缺陷。这些工具可以帮助我们编写更加健壮和表达力更强的代码,避免许多常见的编程陷阱。提供了一种表示"可能存在或不存在的值"的方法,是处理可选数据的优雅解决方案。实现了类型安全的联合体,可以安全地存储多种可能类型中的一种。则提供了一种完全动态的类型擦除容器,可以存储任意类型的单个值。本文将深入探讨这三种类型的设计理念、用法、性能特性以及实际应用场景,帮助你充分利用这些强大工原创 2025-05-18 11:07:29 · 1083 阅读 · 0 评论 -
C++学习:六个月从基础到就业——C++17:if/switch初始化语句
C++17引入的if和switch语句初始化表达式是一项看似简单但非常实用的语法改进。它解决了变量作用域控制的痛点,使代码更简洁、更安全,并与其他C++17特性(如结构化绑定)协同工作得非常好。精确控制变量作用域,减少变量泄漏和相关错误简化临时变量的管理,使代码更加清晰减少嵌套层次,使代码结构更加扁平与其他C++17特性无缝集成,增强语言的表达能力这个特性适用于许多实际场景,包括资源管理、错误处理、查找操作和临时变量控制等。在现代C++编程中,它已成为提高代码质量的重要工具。原创 2025-05-18 11:06:24 · 807 阅读 · 0 评论 -
C++学习:六个月从基础到就业——C++17:结构化绑定
设计为聚合类型(具有公有数据成员的类)提供和特化以及get<N>函数提供自定义的get<N>函数和相应的类型特性// 自定义复数类,私有成员private:public:// 友元get函数,用于结构化绑定// 为Complex类提供tuple_size特化template<>// 为Complex类提供tuple_element特化template<>template<>// 使用结构化绑定。原创 2025-05-18 11:04:56 · 1034 阅读 · 0 评论 -
C++学习:六个月从基础到就业——C++11/14:其他语言特性
要使自定义类型支持范围for循环,需要提供begin()和end()private:int start;int end;// 实现迭代器接口...public:// 使用// 输出: 1 2 3 4 5// 距离字面量// 转换为米// 使用// 创建Distance对象// 字符串字面量// std::string,不是C风格字符串// 时间字面量// 复数字面量// 复数(3, 4)nullptr:提供类型安全的空指针字面量constexpr。原创 2025-05-18 10:59:40 · 1144 阅读 · 0 评论 -
C++学习:六个月从基础到就业——C++11/14:列表初始化
聚合初始化:用于满足聚合条件的类或结构体initializer_list构造函数:用于接受任意数量的同类型值// 简单的JSON值类public:private:Type type;public:// 构造函数// 数组构造函数// 对象构造函数// 访问方法// 转换为字符串break;break;break;break;oss << "[";break;oss << "{";原创 2025-05-17 21:15:20 · 1991 阅读 · 12 评论 -
C++学习:六个月从基础到就业——C++11/14:decltype关键字
decltype关键字是C++11中引入的强大类型推导工具,它允许我们在不实际计算表达式的情况下获取表达式的精确类型。与auto不同,decltype能够保留引用、const和volatile限定符,使其特别适合用于泛型编程和模板元编程。C++14引入的则进一步简化了类型推导,特别是在需要完美转发和保留表达式精确类型的场景下,极大地提高了代码的灵活性和表达力。要有效使用decltype和,需要理解它们的类型推导规则,特别是对标识符、括号表达式和左值表达式的处理。同时,应当避免在过于复杂的表达式上使用。原创 2025-05-17 21:13:57 · 1628 阅读 · 13 评论 -
C++学习:六个月从基础到就业——C++11/14:auto类型推导
auto关键字是现代C++中简化代码、提高可读性和维护性的重要工具。它通过自动类型推导,消除了手动编写复杂类型的需要,适合用于迭代器声明、lambda表达式存储、复杂类型处理等场景。C++14进一步扩展了auto的应用范围,使其可用于函数返回类型推导和lambda参数,让C++代码更加灵活和表达力强。要有效使用auto,需要理解其类型推导规则,包括如何处理引用、const修饰符、数组和函数衰减等特性。同时,应当在代码清晰性和简洁性之间找到平衡,避免过度使用导致代码难以理解。原创 2025-05-17 21:09:26 · 993 阅读 · 0 评论 -
C++学习:六个月从基础到就业——C++11/14:lambda表达式
/ 简单的整数序列生成器// 斐波那契序列生成器a = b;// 使用整数生成器// 生成1, 3, 5, 7, ...i < 5;++i) {// 使用斐波那契生成器// 生成0, 1, 1, 2, 3, 5, ...i < 10;++i) {// 生成器与STL算法结合// 生成0, 5, 10, 15, ...return 0;原创 2025-05-17 21:06:56 · 1172 阅读 · 0 评论 -
C++学习:六个月从基础到就业——C++11/14:lambda表达式
/ 简单的整数序列生成器// 斐波那契序列生成器a = b;// 使用整数生成器// 生成1, 3, 5, 7, ...i < 5;++i) {// 使用斐波那契生成器// 生成0, 1, 1, 2, 3, 5, ...i < 10;++i) {// 生成器与STL算法结合// 生成0, 5, 10, 15, ...return 0;原创 2025-05-04 22:46:02 · 1250 阅读 · 0 评论 -
C++学习:六个月从基础到就业——C++11/14:右值引用与移动语义
右值引用和移动语义是现代C++中最重要的优化技术之一,它们通过减少不必要的对象复制,大幅提高了程序的性能,特别是在处理大型数据结构时。提高性能:通过"窃取"资源而不是复制,减少内存分配和数据复制更高效的标准库:标准容器和算法通过移动语义获得显著性能提升表达能力增强:能够明确区分对象的"移动"和"复制"语义为管理资源的类实现移动操作理解并正确使用std::move和遵循移动语义的最佳实践使用智能指针和标准库容器自动受益于移动语义。原创 2025-05-04 22:45:13 · 1255 阅读 · 0 评论 -
C++学习:六个月从基础到就业——异常处理:机制与最佳实践
在实际项目中,标准异常可能无法满足所有需求,我们经常需要创建自定义异常类。一个好的做法是从// 自定义异常基类public:// 特定类型的异常private:public:private:public:// 使用异常try {try {// 例如,在特定错误码的情况下重新抛出异常return 0;异常处理是C++中处理错误的强大机制,但需要谨慎使用才能充分发挥其优势。基础机制:理解try-catch-throw语法和栈展开过程。原创 2025-04-29 13:12:23 · 904 阅读 · 0 评论 -
C++学习:六个月从基础到就业——模板编程:模板元编程基础
模板元编程是一种编程范式,它利用C++模板系统在编译期进行计算和类型操作。通过模板实例化和特化机制,我们可以创建在编译时执行的"程序",而不是在运行时执行的传统程序。使用类型作为值使用模板特化作为条件语句使用递归模板实例化作为循环使用模板实例化作为函数调用虽然这种编程方式看起来非常不同,但它可以实现与传统编程相同的计算功能,只不过是在编译时进行的。模板元编程是C++中一种独特而强大的编程范式,它允许我们在编译期进行计算和类型操作,从而实现零运行时开销的抽象和优化。原创 2025-04-29 12:15:31 · 1225 阅读 · 0 评论 -
C++学习:六个月从基础到就业——模板编程:SFINAE原则
SFINAE是"Substitution Failure Is Not An Error"(替换失败不是错误)的缩写,它是C++模板实例化过程中的一个基本原则。简单来说,当编译器尝试用具体类型替换模板参数时,如果替换导致了无效的代码(例如,使用了不存在的类型成员或无效的运算),编译器不会立即报错,而是简单地将该模板从重载解析的候选集中移除。这一原则允许我们编写基于类型特性的条件模板代码。例如,我们可以为具有特定成员函数的类型提供一个版本的函数,为其他类型提供另一个版本。// 这个版本只对整数类型有效。原创 2025-04-28 11:50:38 · 1798 阅读 · 1 评论 -
C++学习:六个月从基础到就业——模板编程:可变参数模板
可变参数模板使用省略号(...)来表示模板参数包或函数参数包。// 可变参数函数模板// 可变参数类模板其中,Types是一个模板参数包,它可以匹配零个或多个模板参数;args是一个函数参数包,它可以匹配零个或多个函数参数。可变参数模板是C++11引入的一项关键特性,彻底改变了泛型编程的形态。创建接受任意数量和类型参数的函数和类实现类型安全的可变参数函数,替代不安全的printf风格接口优雅地实现元组、变体类型、函数绑定等高级数据结构编写更加灵活和可扩展的通用库组件。原创 2025-04-28 11:47:43 · 563 阅读 · 0 评论 -
C++学习:六个月从基础到就业——模板编程:模板特化
模板特化是为特定的模板参数提供专门实现的机制。当使用特定类型实例化模板时,编译器会优先选择匹配该类型的特化版本,而不是通用模板。全特化(Full Specialization):为模板的所有参数提供具体类型。偏特化(Partial Specialization):只为部分模板参数提供具体类型或特征,仍保留一些参数作为模板参数。注意,函数模板只支持全特化,不支持偏特化。模板特化是C++泛型编程的强大工具,允许我们为特定类型提供专门的实现,同时保持代码的通用性。模板特化的基础。原创 2025-04-27 21:47:06 · 1212 阅读 · 0 评论 -
C++学习:六个月从基础到就业——模板编程:类模板
类模板的定义使用templatetemplate <typename T> // 或 template <class T>private:public:这里定义了一个简单的容器类模板,可以存储任意类型的元素。模板参数T在类定义中用作占位符,表示将来使用类模板时会被具体类型替换。类模板的成员函数可以在类内定义,也可以在类外定义。// 类内定义(如前面例子中的size()函数)public:} // 直接在类内定义// ...其他声明// 类外定义count(0),原创 2025-04-27 21:43:49 · 1212 阅读 · 13 评论 -
C++学习:六个月从基础到就业——模板编程:函数模板
函数模板的定义使用templatetemplate <typename T> // 或者 template <class T>a : b;在这个例子中,T是一个类型参数,它作为一个占位符,表示在函数实例化时会被替换为具体的类型。// 查找元素= end) {++begin;return end;// 计算元素数量= end) {++count;++begin;// 转换元素= end) {++begin;++result;// 累积操作= end) {原创 2025-04-26 18:07:52 · 993 阅读 · 0 评论 -
C++学习:六个月从基础到就业——STL:分配器与设计原理
分配器是一个封装了内存分配和释放策略的类,它为STL容器提供了统一的内存管理接口。内存分配:为容器中的元素分配内存内存释放:释放不再需要的内存分配器使得容器的内存管理与其算法逻辑分离,符合单一职责原则,同时提供了灵活性,允许用户根据需要替换默认的内存管理策略。// 一个简单的自定义分配器示例public:// 类型定义(C++17以及之后)// 构造函数和析构函数// 复制构造函数// 分配内存return p;// 释放内存。原创 2025-04-26 18:05:57 · 1161 阅读 · 0 评论 -
C++学习:六个月从基础到就业——STL:函数对象与适配器
函数对象是一个实现了函数调用运算符(operator())的类或结构体的实例。由于它可以像函数一样被调用,因此也被称为仿函数。// 基本函数对象示例int value;// 函数调用运算符// 使用函数对象// 等同于调用addFive.operator()(10)// 输出:10 + 5 = 15// 创建临时函数对象并立即调用// 输出:7 + 3 = 10return 0;STL在头文件中提供了一系列的预定义函数对象,这些函数对象执行常见的算术、比较和逻辑操作。原创 2025-04-25 09:09:22 · 1119 阅读 · 1 评论 -
C++学习:六个月从基础到就业——STL算法(四)数值算法(下)与集合算法
accumulate和iota。高级数值应用:数值积分、数值微分和移动平均。set_unionincludes和merge。实际应用示例:用户兴趣分析和文本相似度计算。最佳实践与性能考量。这些算法为处理数值数据和有序集合提供了强大的工具,掌握它们可以帮助你编写更简洁、高效的代码,避免重新发明轮子。在下一篇文章中,我们将探讨STL算法的实际应用案例,展示如何将这些算法组合起来解决复杂的实际问题。原创 2025-04-25 09:00:16 · 846 阅读 · 0 评论 -
C++学习:六个月从基础到就业——STL算法(三)—— 数值算法(上)
STL的数值算法主要定义在<numeric>头文件中,它们提供了一系列用于数值计算的函数模板。与其他STL算法一样,这些数值算法也是通过迭代器操作容器元素,因此可以应用于任何满足迭代器要求的容器。- 计算序列元素的累加值或通过指定操作的累积值- 计算两个序列的内积或通过指定操作的组合值- 计算序列的部分和(即前缀和)- 计算序列中相邻元素的差值std::iota- 用连续递增的值填充序列此外,C++17新增了几个并行版本的数值算法,如等,它们提供了更高的性能和灵活性。原创 2025-04-24 20:18:29 · 1103 阅读 · 0 评论 -
C++学习:六个月从基础到就业——STL算法(二)排序与变序算法
本文详细介绍了STL算法库中的排序和变序算法,这些算法为C++程序员提供了强大的数据处理工具。排序算法std::sort:通用快速排序:稳定排序:部分排序:定位第N个元素和:排序状态检查二分查找算法:检查元素是否存在和:查找边界:查找等值范围变序算法:反转元素顺序:旋转元素:随机打乱元素和:生成排列通过实例,我们展示了这些算法在实际应用中的用法,如数据排序、查找、随机采样和排列生成等。掌握这些算法可以帮助你编写更简洁、高效的代码,并且避免重复发明轮子。原创 2025-04-24 20:02:56 · 1983 阅读 · 25 评论 -
C++学习:六个月从基础到就业——STL算法(一) 基础与查找算法
STL算法库是C++标准模板库的一部分,提供了一系列用于处理容器元素的通用函数模板。这些算法通过迭代器操作容器中的元素,使得相同的算法可以应用于不同类型的容器,实现了代码的高度复用。STL算法库主要位于头文件中,还有部分数值算法位于<numeric>头文件中。遍历算法:如for_each和for_each_n查找算法:如findfind_ifsearch和计数算法:如count和count_if比较算法:如equalmismatch和条件检查算法:如all_ofany_of和none_of特殊查找算法。原创 2025-04-23 16:57:43 · 1887 阅读 · 17 评论 -
C++学习:六个月从基础到就业——C++学习之旅:STL迭代器系统
迭代器是一种行为类似于指针的对象,提供了一种访问容器中元素的方式,而不需要暴露容器的内部实现。通过迭代器,我们可以遍历集合、访问集合中的元素,并且根据需要修改这些元素。迭代器抽象了底层容器的实现细节,提供了一套统一的接口,使得算法可以工作在各种不同的容器上,而无需知道这些容器的具体实现。有时候,我们需要为自定义容器实现迭代器。// 简单的环形缓冲区private:// 开始位置// 元素数量public:++count;else// 环形缓冲区满了,覆盖最旧的元素。原创 2025-04-23 16:55:58 · 908 阅读 · 4 评论 -
C++学习:六个月从基础到就业——C++学习之旅:STL容器详解
STL容器是存储数据集合的类模板,它们遵循特定的设计模式,提供标准化的接口,并且拥有各自的性能特点。容器是STL三大核心组件(容器、算法、迭代器)中最为基础的部分。原创 2025-04-22 09:14:11 · 1941 阅读 · 13 评论 -
C++学习:六个月从基础到就业——内存管理:自定义内存管理(下篇)
C++标准库容器允许我们通过自定义分配器来控制内存分配行为,这是一种将自定义内存管理与标准容器结合的强大方式。游戏开发对内存管理有特殊要求,包括高性能、可预测的延迟和减少内存碎片。// 简单的游戏对象// 位置// 速度int health;// 生命值int id;// 唯一标识符// 是否活跃if (!// 简单的物理更新id = newId;x = posX;y = posY;z = posZ;原创 2025-04-22 08:36:03 · 702 阅读 · 0 评论 -
C++学习:六个月从基础到就业——内存管理:自定义内存管理(上篇)
最直接的自定义内存管理方式是重载全局new和delete// 重载全局operator newif (!return ptr;// 重载全局operator delete// 重载数组版本if (!return ptr;// 使用重载的new/deletedelete p1;// 使用重载的new[]/delete[]return 0;Value: 42这种方法会影响程序中所有的内存分配,通常用于全局内存跟踪或调试。原创 2025-04-21 10:31:02 · 1325 阅读 · 6 评论 -
C++学习:六个月从基础到就业——内存管理:智能指针详解
智能指针是包装原始指针的类,它们使用RAII技术来管理资源的生命周期。智能指针的核心思想是通过构造函数获取资源,并在析构函数中自动释放资源,从而消除手动内存管理的负担和错误风险。自动内存管理:离开作用域时自动释放资源防止内存泄漏:即使在异常情况下也能确保资源被释放防止悬垂指针:通过所有权模型减少悬垂指针风险明确所有权语义:不同类型的智能指针表达不同的所有权意图提高代码可读性和安全性:显式表达资源管理意图默认情况下,使用delete或delete[]来释放资源。原创 2025-04-21 10:04:56 · 1115 阅读 · 4 评论
分享