
C++
文章平均质量分 91
万我.
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ 详谈智能指针(二)
摘要:文章探讨了C++智能指针shared_ptr存在的循环引用问题及其解决方案。当两个shared_ptr相互引用时会导致引用计数无法归零,造成内存泄漏。通过将其中一个指针改为weak_ptr(不增加引用计数)可有效解决该问题。同时分析了shared_ptr线程安全问题,指出引用计数需原子操作保护。文章还介绍了C++11与Boost智能指针的关系,并讨论了内存泄漏的危害及检测方法。最后强调预防内存泄漏应优先使用智能指针等RAII技术,并辅以检测工具。原创 2025-08-12 11:22:26 · 851 阅读 · 0 评论 -
C++ 详谈智能指针的使⽤及其原理(一)
本文系统介绍了C++智能指针的核心概念与应用。主要内容包括:1)智能指针在异常安全场景中的必要性,通过RAII机制自动管理资源释放;2)标准库智能指针(auto_ptr/unique_ptr/shared_ptr/weak_ptr)的特性与使用场景,重点分析各自拷贝语义的差异;3)智能指针的底层实现原理,包括引用计数机制和删除器功能的实现方式;4)通过模拟实现auto_ptr、unique_ptr和shared_ptr,深入剖析智能指针的设计思想。原创 2025-08-12 11:13:28 · 933 阅读 · 0 评论 -
C++ 详谈多态
本文详细介绍了C++中的多态机制,包括多态的概念、实现方式及其底层原理。多态分为编译时多态(静态多态)和运行时多态(动态多态),重点讨论了运行时多态的实现条件:必须通过基类指针或引用调用虚函数,且派生类需重写基类虚函数。文章还探讨了虚函数表、纯虚函数与抽象类、虚函数重写常见问题(如协变、析构函数重写)以及C++11新增的override和final关键字。通过实例分析了多态在底层如何通过虚函数表实现动态绑定,区分了静态绑定与动态绑定的不同。最后通过内存地址对比验证了虚函数表通常存储在代码段(常量区)。原创 2025-08-11 07:00:00 · 733 阅读 · 0 评论 -
C++ 详谈继承(二)
本文探讨了C++继承机制的三个关键问题:1)友元关系不能继承,基类友元无法访问派生类私有成员,需单独声明;2)静态成员在继承体系中共享唯一实例,而非静态成员各自独立;3)多继承带来的菱形继承问题,包括数据冗余和二义性,可通过虚继承解决但不推荐使用。文章建议优先使用组合而非继承来降低耦合度,仅在is-a关系明确或需要多态时使用继承。通过汽车与轮胎、栈与向量的示例,说明了组合与继承的适用场景,强调组合在维护性上的优势。原创 2025-08-10 09:00:00 · 890 阅读 · 0 评论 -
C++ 详谈继承(一)
摘要:继承是面向对象程序设计实现代码复用的核心机制,允许在基类基础上扩展功能形成派生类。文章详细介绍了继承的概念、定义格式(public/protected/private继承方式)及访问权限变化规则,重点分析了基类与派生类间的转换关系(切片原则)和同名成员隐藏规则。通过Student/Teacher继承Person的实例,演示了代码复用优势。同时深入讲解派生类默认成员函数(构造、拷贝构造、operator=、析构)的生成规则及调用顺序,并给出两种实现不可继承类的方法 ...原创 2025-08-10 07:00:00 · 831 阅读 · 0 评论 -
C++ 详谈异常
异常处理机制摘要 异常处理机制允许程序在运行时检测和处理问题,将问题检测与解决过程分离。C++通过抛出(throw)异常对象来报告错误,由匹配的catch块处理。异常处理流程包括: 抛出异常后,程序暂停当前执行,沿调用链查找匹配catch 若未找到匹配,程序终止;否则执行catch块代码 异常对象会被拷贝传递,确保catch块获得完整错误信息 异常处理优势原创 2025-08-09 08:00:00 · 1313 阅读 · 0 评论 -
C++ 详谈模版(二)
本文介绍了C++模板编程中的关键概念。主要内容包括:1)非类型模板参数的使用限制和注意事项;2)模板特化的两种形式(函数模板特化和类模板特化),其中类模板特化又分为全特化和偏特化;3)模板分离编译问题及解决方法。文章通过具体代码示例展示了模板特化的应用场景,并分析了模板编程的优缺点,如代码复用性和灵活性等优点,以及可能导致的代码膨胀和错误信息难以定位等缺点。这些内容为C++开发者深入理解模板编程提供了实用指导。原创 2025-08-09 06:00:00 · 1863 阅读 · 0 评论 -
C++ 详谈模版(一)
文章摘要:本文介绍了C++中的泛型编程和模板技术。主要内容包括:1)泛型编程概念,通过模板实现代码复用;2)函数模板的定义、原理和使用方法,包括隐式和显式实例化,以及模板参数的匹配原则;3)类模板的定义格式和实例化过程。模板技术允许编写与类型无关的通用代码,编译器会根据实际类型生成特定版本的函数或类,提高了代码的可重用性和维护性。原创 2025-08-08 17:11:54 · 1048 阅读 · 0 评论 -
C++ 一文详谈内存管理
本文介绍了C++内存管理机制,重点对比了C语言与C++的内存管理方式。主要内容包括:1)C/C++内存分布(栈、堆、数据段、代码段);2)C语言动态内存管理函数(malloc/calloc/realloc/free)的使用;3)C++新增的new/delete操作符,以及它们对自定义类型对象的构造和析构支持;4)operator new/delete的底层实现原理;5)定位new表达式的作用;6)malloc/free与new/delete的关键区别。文章强调new/delete在管理自定义类型时能自动调用原创 2025-07-23 21:17:29 · 874 阅读 · 2 评论 -
C/C++ 详谈结构体大小计算(内存对齐)
C/C++结构体大小计算(内存对齐);修改默认对齐数;C++继承场景下的类的大小的计算;如何定义一个计算成员变量在类中偏移量的宏?原创 2025-07-21 17:45:55 · 828 阅读 · 2 评论 -
C++ 从左值引用到右值引用
C++ 11 是在 C++ 98 之后又一个变化比较大的标准。为C++增加了很多东西,其中有一部分是有用的,有一部分是我自认为作用不是很大东西。这一章呢?我们就来说说C++11我,我认为对性能优化最有用的一部分 ---- 右值引用。原创 2025-07-21 16:46:58 · 1147 阅读 · 0 评论 -
C++ 类型转换相关
C++中的类型转换主要包括四种形式:static_cast用于基本类型转换和类层次间的安全转换;const_cast专门用于移除const属性;dynamic_cast提供运行时安全的类继承体系转换,失败会返回nullptr;reinterpret_cast则用于指针和整数间的强制转换。static_cast和dynamic_cast适用于类层次转换,后者更安全但性能较低。const_cast常与static_cast配合使用。reinterpret_cast风险最大,仅进行二进制位拷贝。不同类型的转换应根原创 2025-07-17 20:03:31 · 1020 阅读 · 0 评论