- 博客(35)
- 收藏
- 关注
原创 主从Reactor服务器
此时该连接有新的通信,(通过调用回调的方式,任意事件回调)那么我们就针对该连接的智能指针再创建一个智能指针,使得智能指针的计数器+1,并将对断开连接的操作放到时间轮的新位置,这样,当 时间轮走到旧的位置时,虽然仍然会释放连接,智能指针的计数-1,但由于计数未到0,不执行类的析构函数,达到刷新任务的目的,也就是我们说的非活跃连接销毁。调用对应的处理函数后,再将函数处理结果接入响应报文的正文之中,就可以按照响应报文的格式组织发送了,发送完毕后,重置该连接的上下文,并根据其长短连接属性决定是否断开连接。
2024-05-14 16:26:14 457 1
原创 polymorphic--多态
多态,顾名思义,多种形态。指的是不同的人做相同的事会产生不同的结果。在程序上的表现就是,不同的对象调用同一个函数会呈现不同的结果。
2024-05-19 09:51:10 271 3
原创 杂记3(指各种知识)
在signed char中,0有两种表示方式即00000000和10000000(这样的话只能表示-127--127这255个数字)。由于共用体所有成员是共用一块空间的,因此计算共用体的大小只用找到最大成员的大小,并确保它是最大对齐数(包括嵌套联合体成员的对齐数)的整数倍就可以了。举个例子,像是10000010,因为它是有符号数,最左侧的1会被当作符号位,表示负且不计算值的大小(如果是0则表示正),如果你这样认为那么你就错辣!实际上,signed char的取值范围是-128--127。
2024-05-17 10:11:12 798
原创 智能指针!
干什么用的?将智能指针封装成类,利用类对象释放时调用析构函数的特点,将资源交给智能指针管理利用对象生命周期控制资源——RAII如何过渡到下面这个问题的?智能指针的拷贝,默认是浅拷贝,即多个智能指针会指向同一份资源。这是没有问题的,符合智能指针的定义这样做的问题是,同份资源会被多次析构为了解决智能指针拷贝(拷贝构造、赋值拷贝)导致的多次析构的问题,衍生出了如下3种智能指针。
2024-05-16 21:31:32 560 1
原创 Linux——动/静态库
作用于编译阶段,告诉编译器产生与位置无关的代码,此时产生的代码中没有绝对地址,全部都使用相对地址,从而代码可以被加载器加载到内存的任意位置都可以正确的执行。由于库是.o文件的集合,所以我们要先自己创造一批.o文件,(.o文件是由源文件生成的),除此之外,我们还需要头文件,为将调用的库函数做声明。也是要在默认路径下搜索库文件的,加载器并不知道我们的库文件存在哪个路径。注:在Linux中,去掉lib与.so及其后面的版本号就是该库的名称,.so后缀表示这是动态库,.a后缀表示这是静态库。
2024-01-07 12:09:46 1874 3
原创 Linux--基础IO
I input;O output 以我目前的理解,我认为IO就是“写进去”与“拿出来”的过程。比如说文件IO,就是把内容写进文件里面,得到文件里的内容的过程。那么,往文件内容写东西,得到文件内容,有哪些“手段”呢?FILE是一个结构体,要想成功访问文件,那么FILE结构体中就一定有存储fd的变量。FILE是结构体_IO_FILE的重命名如下是_IO_FILE的成员变量,_fileno是用于存放fd的缓冲区,是一块内存的空间,是用于存放数据的地方。
2024-01-02 19:42:33 1566 3
原创 输出重定向
ls > log.txt是什么意思?我们先来看看现象我们当前所处的目录有以下文件/文件夹接着我们执行 ls > log.txt我们发现:当前目录下创建了log.txt文件,log.txt存储了ls命令执行的结果。这是怎么一回事呢?我们把这种现象成为以ls>log.txt为例,他把本该输出到显示器的内容输出到了log.txt文件里了。所以才会发生上述现象。
2023-11-20 10:06:03 47
原创 每日一练大合集
堆排序:升序-大堆 降序-小堆 堆顶元素和堆尾元素交换,除堆尾元素外进行向下调整。TOP-K问题:找最大的K个数,建K个元素的小堆,反之建大堆。删除:堆顶元素与堆尾元素替换,除了堆尾元素外再向下调整。知识点Q(1:200)意思是从下标1到下标200。知识点:查找长度:成功找到该数的次数。建堆:向上调整、向下调整(效率更高)知识点:二叉排序树就是二叉搜索树。求两个数的最大公约数:辗转相除法。怎么做:题意理解+画图。
2023-11-12 14:32:57 32
原创 每日一练Day9(大合集)
在end2入队列,end2++,在end2前(end2-1)出队列,end2--;在end1入队列,end1--。知识点:在多继承中,如果父类指针指向子类,但该父类没有虚表,调用析构函数会报错。什么是不稳定,相同元素的相对位置发生改变,快排会改变相同元素的相对位置。A.插入可能会扩容,生成新的内存空间,此时迭代器指向的空间已被释放。题目中说的队列两端其实指的是end1(头)与end2(尾)。正常的循环队列是:在end1处出队列,在end2处入队列。知识点:迭代器失效,是指迭代器指向的空间不存在了。
2023-11-04 13:51:58 18
原创 每日一练Day8
我们已经重写了析构函数,并把它设置为虚函数,此时p1指向的是student中的person,person里有一张虚表,虚表里存放了重写后的析构函数的地址,p1会调用这个析构函数。知识点:A的确是继承了B的成员(成员函数,成员变量),但是A访问这些成员仍然要遵守这些成员在B类的访问规则,例如:A继承了i,但是i仍然是private的,因此不能在类外类中访问。只调用了父类析构,why?因为我p1是person*类型,指向的是student中的person,所以它会调用student中person的析构函数。
2023-10-21 14:39:00 29
原创 每日一练Day8
当函数返回值是类类型对象时 编译器会对他进行优化 具体怎么个优化法呢 比如传回来一个类类型对象 要用它初始化另一个类对象 这时不会调用拷贝构造 而是直接赋给他。D为什么错 x是构造函数的形参是临沭变量 构造函数结束后 x对应的那片内存就还给操作系统了 值可能会发生改变。p是一个指针 但是它的指向地址现在是随机的 所以不能随便解引用。前几天写的被csdn吞了。拷贝构造是一种初始化 是用已经存在的对象初始化新的对象。1首先使用malloc开辟需要类型大小的空间。2调用该类型的构造函数。1调用该类型的析构函数。
2023-10-15 23:26:47 40 1
原创 每日一练DAY_3
知识点:[]的优先级比**高,所以这是一个三行四列的二维数组,里面存放的是**类型的指针?int(*p)[4]因为括号的原因,p先于*结合,p是一个数组指针。const在*的左边,指针所指向内容不能改变,指针的指向可以改变。const在*的右边,指针不能改变,指针指向的内容可以改变。所以p先于[4]结合,因此 int* p[4]是指针数组。知识点:const与*的相对位置,知识点:'\n'代表的就是回车符。知识点:[]的优先级比*高。printf的实现?
2023-10-03 16:02:39 32
原创 每日一练DAY_25_9
a[i]代表某个字母,'Z'-a[i]即这个字母与'Z'的相对距离,这个相对距离就是这个字母在count数组中的下标。例如'Z'-'Z'=0,0就是'Z'在count数组中的下标。小总结一下:字符与数字的转换有一个ASCII码表,是一个数字、字符相互映射的表,比如字符'A'的10进制是65,因而字符间相减的时候其实是他们所对应的10进制数字在相减,综上,字符间的运算最终是其所映射的数字间的运算。前者将'a''b''c''\0'存储在数组acX里,数组内容可以改变。字符-字符得到 数字(字符间的相对距离)
2023-09-28 19:37:09 24 1
原创 Inheritance--继承
1.若子类和父类存在同名成员,子类对象会优先访问子类中的同名成员2.构成隐藏/重定义的条件,父类与子类中存在同名成员1.二义性由于Child1与Child2都继承了Father的成员,Grandchild又继承自Child1、Child2,那么当Grandchild访问Father中的成员时就会产生二义性,究竟是访问Child1里的Father成员,还是Child2里的Father成员呢?解决方案1,指明访问路径为什么g1._name 没有报错?
2023-08-07 10:46:37 68 6
原创 在实现list时所遇到的问题
在list中具体的场景:在list中,iterator迭代器被封装成了类,iterator类中有 operator!= 这一重载函数//iterator本质上还是一个指向Node类型的指针。调用 operator!编译器会报错,如下:我们不是写了!=的重载函数吗?报错说不匹配,那么只可能是参数不匹配。实参是:lt1.end() ,形参是:__list_iterator& it函数的返回方式有两类,一类是传值返回,一类是传引用返回。这里是传值返回。
2023-07-27 15:30:28 70 1
原创 关于拷贝构造函数的3个问题
形参的类型是自定义类型Date。与内置类型不同的是,内置类型的初始化拷贝可以按字节赋值拷贝,而自定义类型初始化拷贝的规则我们是不知道的,因此需要调用它的拷贝构造函数。由于自定义类型对象的赋值拷贝(指初始化的时候)要调用其拷贝构造函数,所以拷贝构造函数的形参应该用引用。拷贝构造完成的是 初始化 的工作,即只能进行一次。拷贝构造是创造一个自定义类型的对象,赋值运算是对已经存在的对象进行赋值。是类中六大默认成员函数之一。问题3:类中生成的 默认 拷贝构造函数是怎样的。问题2:拷贝构造函数的形参为什么是引用?
2023-07-27 15:29:38 58 1
原创 Basic knowledge-scanf
下图中,我用键盘一次性输入了10 20 30,随即按下回车,表明一次输入完成,但程序直接输出了10 20 30.逻辑是,我把 10空格20空格30回车 输入到了输入缓冲区,10 被提取给了a,随即遇到空格,scanf结束。接着是第二个scanf,检查输入缓冲区是否有数据,此时存在20 30,提取20给b,随即遇到空格,结束这次的scanf。scanf 输入成功的返回值是 输入的个数 eg:scanf(“%d",&a),返回1。scanf会自动在输入缓冲区读取数据(如果有数据的话,没有的话就会等待用户输入)
2023-05-24 21:34:00 44
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人