- 博客(17)
- 收藏
- 关注
原创 5.智能指针有什么缺点?
智能指针存在以下缺点:1.性能开销,shared_ptr的原子引用计数操作会产生额外消耗;2.循环引用问题,可能导致内存泄漏,需配合weak_ptr解决;3.内存管理复杂化,make_shared会将对象和控制块绑定,可能延迟内存释放。智能指针适用于需要自动资源管理的场景,而裸指针更适合性能敏感或简单临时对象的情况。shared_ptr提供共享所有权和线程安全的引用计数,但管理的对象本身仍需同步机制;weak_ptr则用于打破循环引用而不增加引用计数。
2025-12-30 19:12:46
336
原创 4.常量指针和指针常量的区别?
本文总结了C++中的几个重要概念:1)常量指针与指针常量的区别在于指针可变性和指向数据的可变性;2)全局变量和局部变量在作用范围、生命周期、存储位置和初始值等方面存在差异;3)引用作为函数参数的优势包括避免拷贝、直接修改原对象和提高大对象传输效率;4)模板在编译期实例化,可通过自动或显式方式实现;5)模板通常放在头文件中以确保编译器能获取完整定义,避免链接错误。这些知识点对理解C++核心特性具有重要意义。
2025-12-30 18:07:42
59
原创 3.空类可以实例化吗?大小是多少?
本文摘要:C++中空类可实例化且占用1字节内存。子类无法继承父类的构造函数、析构函数、拷贝构造函数、赋值运算符和私有成员函数。构造函数初始化顺序为:基类构造→成员变量初始化→构造函数主体;析构顺序相反。C++提供6种构造函数:默认构造、参数化构造、拷贝构造、移动构造、委托构造和显式构造,其中显式构造可防止隐式类型转换。
2025-12-29 23:00:26
275
原创 2.区分C++中相似但不同的类型
本文对比了C++中三种重要概念的区别:1. 结构体(struct)与类(class):struct默认public访问和继承,用于简单数据结构;class默认private,用于严格封装。2. 结构体与联合体(union):结构体成员独立存储,联合体成员共享内存。3. 指针与引用:指针存储地址可变,引用是别名不可变;指针用于内存管理,引用用于参数传递。这些区别涉及默认行为、内存使用和应用场景等关键方面,反映了C++不同特性的设计目的和使用方法。
2025-12-29 22:16:29
108
原创 1.C++三大特性
摘要:面向对象编程的三大特性包括封装、继承和多态。封装将变量和方法组合在类中;继承允许派生类复用基类成员并重写方法;多态表现为同一接口的不同形态。访问修饰符public、private和protected控制成员可见性:public成员在外部可访问,protected仅子类可访问,private仅类内可访问。不同继承方式会改变基类成员的访问权限:public继承保持原权限,protected继承将public降为protected,private继承将所有基类成员变为private。
2025-12-28 21:59:02
256
原创 malloc函数底层原理(4)
在freelist中找到内存大小合适的内存块,并有多种查找策略,如首次适配(first fit)、最佳适配(best fit)、最差适配(worst fit)。若找不到合适大小的内存块,再次向操作系统申请内存,申请大小小于128kb使用break,申请大小大于128kb使用mmap。:若找到的内存块远大于所需要的大小,要进行内存块切割分半,一半用于满足当前需要,另一部保留在freelist中为以后使用。:malloc返回内存块地址,但此时的内存块可能未初始化,需要在使用前进行适当初始化操作。
2025-01-11 23:53:54
306
原创 IO多路复用模型Select
IO多路复用模型是一种同步IO模型,其原理在于使用一个线程完成在集合内的多个文件句柄的监视,若在集合中发现句柄,则进行读写操作,反之这一直处于阻塞状态,直至在集合中发现句柄。
2024-08-11 19:28:43
606
原创 TCP文件传输(客户端的文件上传)
TCP传输的流程、TCP传输的流程在应用程序当中调用Winsock API 函数,首先通过函数完成对Winsock服务的初始化,因此需要调用函数,使用Socket的程序在使用Socket之前必须调用函数。2.socket()套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。
2024-08-08 00:25:43
1411
原创 堆排序算法
堆的含义:堆的本质是二叉树;堆排序就是将给定的数组构建除二叉树。对该数组进行调整。对调整后数组进行排序、调整。相关概念:与排序二叉树的区别、满二叉树、完全二叉树
2024-06-25 22:15:35
1205
原创 桶排序算法
什么是桶排序?桶排序就是把数据放到一个桶(容器)中,在这个桶中进行一系列的排序操作,再将桶中的数据传回原处的过程叫做桶排序。例如:把数组的内容放到一个桶中,在桶中进行排序,类似于哈希查找的拉链法,可参考哈希拉链法的操作处理。
2024-06-24 15:36:10
822
原创 归并排序算法
例如将一个数组分成多块组成,通过递归完成对每一部分的排序,判断条件:Start>=End时即分完一部分,进行return跳出操作。此时对0,1位置进行排序,需要临时开辟一个空间即一个长度为(end-start+1)的数组,利用该数组对原数组的分块进行排序,类似于快速排序,但有别与快排,归并排序使用了分治(即分开治理)的思想。Start初始为0,End初始为9,mid为(0+9)/2。Step1:通过递归进行拆分;以一个长度为10的数组为例。Step2:进行归并排序;直至归并排序全部排序完毕。
2024-06-23 14:59:24
357
原创 哈希查找(按个位取余的方式)
按个位取余发现有两个或多个数重复,如:会发现15,25,55,重叠了,对此进行冲突处理,冲突处理有三种:以上图为例,将和25按个位取余后重复的数填到25后面的位置,如果相邻的位置满了,在向后填。再次使用哈希法,直至填充完毕。以上图为例,像拉链一样将重叠数据以拉链形式挂在下面,示例代码
2024-06-18 15:07:04
731
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1