C++
文章平均质量分 84
C++学习总结
cliu1_16
人生两大悲剧:结婚以后不恋爱,毕业以后不学习。
展开
-
C++ 网络编程学习七
【代码】C++ 网络编程学习七。原创 2024-03-19 10:21:12 · 689 阅读 · 0 评论 -
C++ 网络编程学习五
饿汉式是在程序启动时就进行单例的初始化,这种方式也可以通过懒汉式调用,无论饿汉式还是懒汉式都存在一个问题,就是什么时候释放内存?多线程情况下,释放内存就很难了,还有二次释放内存的风险。, 单线程仅有一个io_context服务用来监听读写事件,就绪后回调函数在一个线程里串行调用。单例模式的单例由指针存在,创建单例的时候,用加锁的方式进行判断。防止在加锁的过程中,出现单例类被创建的情况。消息id占2个字节,消息长度占2个字节,消息头共4个字节。消息 = 消息id + 消息长度 + 消息内容。原创 2024-03-14 18:21:00 · 1087 阅读 · 0 评论 -
C++ 网络编程学习四
在服务器的发送数据时会构造消息节点,构造消息节点时,将发送长度由本地字节序转化为网络字节序.network_to_host_short从网络字节序转成本地字节序。我们先创建一个msg.proto,该文件用来定义我们要发送的类信息。在 boost::asio 库中,可以使用。函数将主机字节序转换为网络字节序。原创 2024-03-13 18:18:41 · 1140 阅读 · 0 评论 -
C++ 网络编程学习三
问题:智能指针传给函数对象,函数对象不释放,智能指针也就不会被释放掉。把智能指针传递给session用的回调函数,函数内部再使用智能指针,这个时候智能指针就不被释放。假如包含智能指针的函数没有调用怎么办?用lambda表达式和bind强制将智能指针中的shared_ptr加1。构造一个伪闭包:处理粘包问题粘包问题:客户端发送: hello world! hello world!服务器接收:hello world! hello world!客户端给服务器发送了两个hello world原创 2024-02-29 21:13:39 · 931 阅读 · 1 评论 -
C++ 网络编程学习二
【代码】C++ 网络编程学习二。原创 2024-02-26 21:03:02 · 1228 阅读 · 1 评论 -
C++ 网络编程学习一
监听的套接字用于建立连接,通信的套接字用于数据交互。用于数据交互的read和write都是阻塞函数,在单线程下面,一个服务器想和多客户端进行通信,肯定是做不到的,因为accept,read,write都是阻塞的。如果有客户端进行连接,服务器端就可以和发起连接的客户端建立连接,连接建立成功会生成一个用于通信的套接字。单线程流程中,服务器创建用于监听的套接字,绑定本地的ip和端口,listen函数去监听绑定的端口。原创 2024-02-19 16:44:53 · 1023 阅读 · 1 评论 -
C++ JSON解析
【代码】C++ JSON解析。原创 2024-02-06 10:49:59 · 883 阅读 · 0 评论 -
C++ LRU
如果考虑线程安全性,就需要用到锁,C++中的mutex,配合std::lock_guard使用。总是希望最近使用的、最频繁使用的数据存储在比较靠前的位置。原创 2024-01-31 17:52:41 · 398 阅读 · 0 评论 -
C++数据库连接池
对于数据库操作都是在访问数据库的时候创建连接,访问完毕断开连接。原创 2024-01-31 14:05:36 · 1519 阅读 · 0 评论 -
C++实现string类
默认构造函数中,为ptr申请一个字节的堆内存,这样任何情况下,ptr都不为nullptr,避免了ptr是否为nullptr的情况,在随时访问的时候,就可以少写很多if判断。原创 2024-01-25 16:19:22 · 399 阅读 · 0 评论 -
Effective C++ 学习
进行混合类型算术运算的时候,会出现编译通过不了的情况//错误,无法通过编译解决方法:使用friend声明一个函数,进行混合式调用这里的friend和非friend函数是没有关联的。类外部的函数,并非为声明函数的实现。public:当我们编写一个class template, 而他所提供的“与此template相关的”函数支持所有参数隐形类型转换时,请将那些函数定义为classtemplate内部的friend函数。原创 2024-01-24 10:18:01 · 827 阅读 · 0 评论 -
CMAKE学习
嵌套的 CMake 也是一个树状结构,最顶层的 CMakeLists.txt 是根节点,其次都是子节点。原创 2024-01-16 13:42:24 · 953 阅读 · 1 评论 -
C++11学习
auto 类型推导范围 for 迭代初始化列表变参模板lambda表达式函数对象包装器右值引用移动语义完美转发智能指针RAII多线程相关参考列表。原创 2024-01-11 17:50:42 · 792 阅读 · 1 评论 -
C/C++ 线程池二
原子指的是一系列不可被CPU上下文交换的机器指令,这些指令组合在一起就形成了原子操作,在多核CPU下,当某个CPU核心开始运行原子操作时,会暂停其他CPU内核对内存的操作,以保证原子操作不会被其他CPU内核干扰。如果将所有的任务都以串行的方式执行,则整个系统的效率将会非常低下,应用程序的用户体验会非常的差。async是C++11引入的函数模板,用于异步执行一个函数,并返回std::future对象,表示异步操作的结果,使用std::async可以方便地进行异步变成,避免了,手动创建线程和管理线程的麻烦。原创 2024-01-08 15:46:44 · 988 阅读 · 0 评论 -
C/C++ 线程池一
线程池就是希望先一个线程执行完一个任务,不被销毁,去执行其他任务。线程池的任务处理过程中,将任务添加到队列,在创建线程后自动执行这些任务。原创 2024-01-03 17:25:34 · 407 阅读 · 1 评论 -
STL泛型编程学习一
iterator_category:迭代器的分类,指它的移动性质,表示迭代器的类型(如输入迭代器、输出迭代器、前向迭代器、双向迭代器、随机访问迭代器等)。这个信息可以方便算法采用最佳的移动方式。:移动构造在进行复制构造的时候,只需要把指针指向原数据,然后把原数据的指针置空,再设置数据大小。difference_type:迭代器之间的距离类型,通常使用ptrdiff_t。value_type:迭代器指向的值类型。告诉算法是int 还是 string?pointer:指向value_type的指针类型。原创 2023-12-18 18:16:08 · 885 阅读 · 0 评论 -
C++ Primer学习二
a. 浅拷贝:简单的赋值拷贝操作。ii. 在编译阶段分配内存,不和类对象在同一个存储空间上,只有非静态成员变量才属于类的对象上。d. 赋值运算符重载:进行赋值,注意深浅拷贝。b. 左移运算符重载:定义输出方式,一定要定义成友元函数,没法用隐式转换。对于类模板中的静态数据,每个类型共享一个,而不是所有的共享一个。rule of three:定义了其中一个,剩下的几个都要定义。f. 函数调用重载:仿函数,定义类似函数的行为,比较自由。b. 深拷贝:在堆区重新申请空间,进行拷贝操作。普通类中包含模板函数 …原创 2023-12-08 15:54:01 · 839 阅读 · 0 评论 -
C++ Primer学习一
学习C++ Primer。原创 2023-12-06 15:07:35 · 28 阅读 · 1 评论 -
C/C++ WebServer服务器一
也就是select,poll,epoll,可以通过一次系统调用,检查多个文件描述符的状态,相比于非阻塞 I/O,在文件描述符较多的场景下,避免了频繁的用户态和内核态的切换,减少了系统调用的开销。用于数据交互的read和write都是阻塞函数,在单线程下面,一个服务器想和多客户端进行通信,肯定是做不到的,因为accept,read,write都是阻塞的。但是这种做法缺点是,单线程的服务器模型中,主程序会不断阻塞的进行连接和数据通信两项工作,两项工作和主线程不独立,当连接请求比较多的时候,效率相对较低。原创 2023-12-05 14:38:21 · 363 阅读 · 0 评论