- 博客(7)
- 收藏
- 关注
原创 Socket网络编程知识体系
TCP服务端:socket() → bind() → listen() → accept() → recv()/send() → close()UDP通信:socket() → bind() → recvfrom()/sendto() → close()TCP客户端:socket() → connect() → send()/recv() → close():sockaddr_in(IPv4)、sockaddr_in6(IPv6)、sockaddr(通用):面向连接、可靠传输、流量控制、拥塞控制、字节流。
2025-09-29 10:58:56
1489
原创 智能指针研究
在实际应用中,我们操作指针需要尽量避免内存泄漏,同时还需要管理指针的所有权,而这些智能指针都可以做到。在明确所有权后分别使用shared_ptr或者unique_ptr,后续可以实现从unique_ptr转向shared_ptr的操作,但不可以从shar到unique_ptr,而且因为是指针所以依旧支持多态特性,避免切片问题或者部分析构。为什么unique_ptr的性能高效,无额外开销?那是因为是unique_ptr的设计非常轻量化。底层仅仅封装一个原始指针,所有操作(如operator*
2025-09-29 09:45:23
600
原创 C++的三大特性(+虚函数)
在C++中封装、继承、多态三大特新并非孤立存在,而是相互支撑、协同工作分别解决了代码如何组织、功能如何复用、行为如何扩展三个问题,共同实现了面向对象编程的核心目标——三者的关系可以看成“基础 - 扩展 - 抽象” 三个层次。虚函数主要解决了运行时的动态绑定。
2025-09-19 19:47:40
400
原创 数组名和数组首元素
数组名是一个标识符,用于引用整个数组对象。从编译器的角度来看,数组名不是一个指针变量,而是一个符号表条目,不是变量,而是一个地址常量(牢记这句话哦),数组名代表整个数组的内存块,编译器在编译时知道他代表整个数组。数组首元素地址就是数组中第一个元素的地址,是一个可修改的变量。
2025-09-19 16:27:52
457
原创 指针学习指南
指针是一个变量,其值是另一个变量的内存地址,在堆上动态申请内存,使用完后主动释放。指针就像一个名片一样,我们可以通过这个名片上的地址,解引用查找名片上所写地址的人。在C++中我们就可以直接访问内存中的值,然后可以修改这个值。
2025-09-18 17:05:30
1277
原创 C/C++编译链接的过程
使用链接器你可以直接引用其它模块的函数和全局变量而无需知道它们的地址,因为链接器在链接的时候会根据你所引用的符号自动的去相应的模块寻找该符号的地址然后将当前模块中所有引用了该符号函数的指令重新修正,让他们的目标地址为真正的该符号的地址,这就是静态链接的最基本的过程和作用。它也像lex一样,可以根据用户给定的语法规则对注入的记号序列进行解析,从而构建出一棵语法树,对于不同的编程语言,编译器的开发者只需要改变语法规则,而无需为每个编译器编写一个语法分析器,所以它有被称为“编译器编译器”。
2025-07-15 18:10:23
1667
原创 C++智能指针
智能指针对象有一个指针,次指针存储的是动态创建对象的地址,用于生存期控制,能够确保智能指针对象离开所在作用域时,自动正确地销毁动态创建的对象,防止内存泄漏。unique_ptr是一个move-only类型,无法被复制,只能转移其"所有权",转移完成后原来的unique_ptr将被设为null语义简单,当你确定使用的之指针不是被共享所有权时,用unique_ptr独占所有权,共享所有权则用shared_ptrunique_ptr效率高于shared_ptr,不需要维护引用技术块。
2025-06-28 09:32:52
516
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅