自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 左值引用与右值引用

别名,声明时必须初始化,目的是通过引用修改变量值可以出现在等号左边,能够取地址,有名字,举例:变量名int a = 10;//a就是左值返回值是左值引用的函数调用前置自增自减++i(对i+1,赋值给i,返回值就是i)--i(同上)赋值运算或复合赋值运算(i=9)=100;//100//1000解引用*a = ...;you。

2024-07-11 19:25:23 186

原创 多态实现原理

函数重载:在编译期确定的,允许在同一作用域中声明多个功能类似的同名函数,这些函数的参数列表,参数个数或参数类型或者参数顺序都不一样,不能通过返回值类型来区别重载。

2024-07-09 17:23:32 296

原创 虚函数表和虚函数指针

虚函数表:它是一个虚函数地址的数组,一个类中可能有多个虚函数,这些虚函数会构成一个数组,虚函数表就是这个数组,记录虚函数地址,指向.text中具体代码的一个位置作用:用来实现多态(一个接口不同形态):静态多态(编译期确定)动态多态(虚继承重写,运行时才确定调用哪个函数,基类指针指向的具体对象类型是子类还是基类?如果是基类,从基类虚函数表找函数指针;如果是子类,从子类虚函数表找函数指针。

2024-07-08 16:36:17 291

原创 手写简单STL标准库——Deque的实现

C++ STL中的deque(双端队列)是一种双开口的,拥有连续储存空间的数据结构。双开口意思就是说既可以在头部进行插入删除元素,又可以在尾部进行插入删除元素。它结合了vector和list的优点。(1)与vector相比:vector没有头插头删的操作,而deque有!(2)与list相比:list没有连续的存储空间,而deque有!

2024-07-07 22:39:10 529

原创 C++——虚析构函数

在继承下,为了使子类析构函数能够得到正常调用,需要将基类的析构函数设置为虚析构函数。设置虚析构函数是有代价的,编译器会为类生成虚函数表,每个对象都需要持有vptr。子类对象指针赋值给基类指针,在调用析构函数时,子类对象的析构不会被调用。什么情况下虚析构函数不正常调用?

2024-07-05 16:29:09 158

原创 C++——拷贝构造函数

如果不提供位拷贝(浅拷贝),那么会造成一下问题1、两个不同的指针指向同一块堆上资源,可能造成重复析构,程序崩溃2、文件句柄,socket重复关闭3、虚函数表指针丢失编译器编译的时候默认生成的,如果不生成会和C++11语法冲突以下情况不得不生成:(1)类成员变量也是一个类(2)类继承一个基类,该基类有默认拷贝构造函数,编译器也会给子类生成一个(3)类成员中虚函数(4)类继承自基类,基类中有虚函数。

2024-07-05 15:58:12 150

原创 C++——深拷贝与浅拷贝

1、用同类的对象构建一个新的类对象2、函数传参为类对象:值传递,类的复制本质分为一下几种运算=赋值运算操作符拷贝构造,位赋值以上三种情况都是浅拷贝,对象中的成员函数数据的简单运算(基于上面的运算和三种拷贝情况)

2024-07-05 14:55:20 210

原创 C++——C++什么时候生成默认构造函数?

即便里面包含成员变量,成员变量是基础类型,还是不会生成默认构造函数,编译器也不知道用什么值初始化。虚基类表记录了类继承的所有的虚基类子对象在本类定义的对象内的偏移位置。(2)如果父类没有提供默认的构造函数,子类也无需提供默认构造函数。(3)如果父类提供了默认构造函数,子类不得不生成默认构造函数。为了实现虚继承,对象初始化阶段需要维护一个指向虚基类的指针。类所有对象需要保存一个指向该虚函数表的指针。不得不提供默认构造函数来初始化虚函数表指针。空的类定义,不会生成构造函数,没有意义。3、类内定义了虚函数。

2024-07-05 13:40:46 196

原创 C++——malloc、free和new、delete的区别

malloc、free是 C语言库函数new,delete是C++中操作符。

2024-07-05 11:01:47 413

原创 C++——关键字override,final的作用

C++11引入的关键字,为了解决下面两个问题1.虚函数复写:不能阻止某个虚函数进一步重写本意写一个新函数,错误重写基类虚函数(子类virtual(关键字可省略))本意是去覆写基类的虚函数,由于签名不一致(比如函数名不一样,参数名不一样,关键字不一样),在子类中重新构建新的虚函数2.类继承不能阻止某一个类进一步派生。

2024-07-03 12:35:16 115

原创 C++——extern关键字作用

extern会引用一个还没声明的变量或者函数,这个变量和函数在其他地方声明了,通常是全局变量或其他函数(不是静态),可能在当前文件,也可能在其他文件。

2024-07-03 11:33:38 282

原创 手写简单STL标准库——List的实现

std::list 和 std::vector 是两种不同的数据结构,std::vector 是基于数组的动态数组,而 std::list 是基于双向链表的数据结构。list适用于需要在序列中执行频繁插入和删除操作的场景。

2024-07-02 22:30:45 664

原创 手写muduo网络库剖析——事件监听器Poller基类

Poller基类定义了监听所有channel通道的监听者应该干哪些事情,是一个抽象类可以由Pollpoller和Epollpoller来继承实现重写里面的方法(IO复用基类,纯虚基类),它积极地监听着所有channel通道所发生的事情,并实时反应到channel,让channel update。是muduo库中多路事件分发器的核心IO复用模块(开启事件循环epollwait)

2024-07-01 18:17:49 191

原创 手写muduo网络库剖析——通道Channel类

epoll_event是Linux操作系统中的一个数据结构,用于表示一个I/O事件。它在使用epoll多路复用技术时作为参数传递给int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)//传入参数int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout)//传出参数以便在事件发生时通知应用程序。委托epoll检测的事件。

2024-07-01 16:21:17 530

原创 手写简单STL标准库——vector的实现

std::vector是一个动态数组,它在内存中以连续的储存元素。与静态数组相比,std::vector允许在运行时动态调整大小,而无需手动管理内存。

2024-07-01 13:56:40 610

原创 C++——const关键字的作用

局部const:栈区,可以通过指针修改全局const:静态储存区,不能用指针修改,会报错,C/C++都不能修改指针:char* const ptr:常量指针,指针不能修改,ptr = astr;ptr = bstr;//报错,这个指针只能指这个常量(值)const char* ptr:指针常量,这个类型的内容不能改,const char* ptr = "hello world";//指针指向的这块内存的值(hello world)不能修改,ptr[0] = 'a';//报错。

2024-06-27 00:17:07 244

原创 select、poll、epoll三种IO多路复用的执行原理

另外poll的第二个参数有两种赋值方式,但是都和第一个参数的数组有关系:1.使用参数1数组的元素个数2. 使用参数1数组中存储的最后一个有效元素对应的下标值 + 1timeout:

2024-06-24 23:32:54 977 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除