C++
文章平均质量分 74
Aries_Ro
go go go! That's my utopia!
展开
-
C++内存泄漏:原因、预防、定位
通过编写自定义的内存分析工具,可以在应用程序中插入代码来跟踪内存分配和释放的情况,从而帮助定位内存泄漏。原创 2024-03-02 16:51:08 · 1349 阅读 · 0 评论 -
C++多线程场景中的变量提前释放导致栈内存异常
因为传入参数num是一个局部参数,我们在fun中修改或读取param时,可能num已经被释放掉了,这时候修改或者读取param就会发生内存泄露,并且这里栈内存泄露。这是非常危险的,因为栈内存可能会造成无法估量的问题。{fun(num);,采用引用传递,并且void fun(int& param)中也采用引用入参的形式。此时可能就会产生内存泄露。上面std::thread funThread(上述是一个正常的多线程代码。原创 2023-08-14 20:23:35 · 761 阅读 · 0 评论 -
C++ operator关键字的使用(重载运算符、仿函数、类型转换操作符)
C++11 中,operator 是一个关键字,用于重载运算符。通过重载运算符,您可以定义自定义类型的对象在使用内置运算符时的行为。operator可以重载我们运算符“±*/=”等;还可以重载我们的函数调用运算符"operator()";还可以做类型转换运算符。原创 2023-08-05 17:41:58 · 1831 阅读 · 0 评论 -
C++标准库中的锁lock_guard、unique_lock、shared_lock、scoped_lock、recursive_mutex
std::mutex.lock是我们在C++中比较常见的锁,我们使用std::mutex.lock方法时,同时需要考虑何时使用std:mutex.unlock方法去解锁。如果在复杂的多线程情况下,加锁、解锁的时机很难把握,也不好实现。RAII原则是。C++新标准提供了lock_guard, 和四种锁,用于各种复杂情况。这四种锁都是满足RAII风格。原创 2023-05-15 22:34:55 · 3939 阅读 · 0 评论 -
智能指针shared_ptr、unique_ptr、weak_ptr
本文记录自己对智能指针的理解,主要涉及shared_ptr,unique_ptr,weak_ptr三个常用的智能指针的引用,原理,遇到的问题展开。原创 2022-07-24 19:06:22 · 2174 阅读 · 1 评论 -
C++中虚函数和纯虚函数的问题总结
目录C++中虚函数和纯虚函数的问题总结虚函数虚函数的定义虚函数的目的纯虚函数纯虚函数的定义纯虚函数的特点虚函数相关问题问题一:基类的虚函数表存放在内存的什么位置,虚表指针vptr的初始化时间问题二:虚函数能否声明为内联函数?问题三:构造函数为什么不能为虚函数?析构函数为什么要虚函数?问题四:构造函数和析构函数可以调用虚函数吗?问题五:静态成员函数static能定义为虚函数吗?常成员函数const呢?问题六:哪些函数不能是虚函数?C++.原创 2022-05-01 14:03:50 · 1605 阅读 · 8 评论 -
构造函数与析构函数的问题总结
目录C++中有哪些构造函数构造函数的定义构造函数的分类构造函数相关问题问题一:什么情况下会调用拷贝构造函数?问题二:赋值初始化和列表初始化的区别?问题三:构造函数和析构函数的执行顺序 ?问题四:构造函数能否声明为虚函数或者纯虚函数,析构函数呢?问题五:构造函数、析构函数、可否声明为内联函数inline问题六:构造函数和析构函数可以调用虚函数吗?问题七:什么情况会自动生成默认构造函数?问题八:为什么拷贝构造函数必须传引用不能传值?C++中有哪些.原创 2022-04-23 17:00:50 · 1325 阅读 · 10 评论 -
C11中类成员变量定义时初始化问题
构造函数的定义构造函数被使用来对象创造时的初始化工作,即在构造函数中为对象赋初值。问题场景:我们在封装一个类时,一般都会含有成员变量和成员函数。而成员变量就涉及到初始化的问题,可知在C11前是不允许成员变量定义时就初始化的操作例如class Solution {public: int arg = 1; //C11之前是会报错 (C11标标准出来后在类中是允许这样初始化的)}这是因为类没有实例化为对象时,是不会为类分配内存,不占存储空间,所以C11之前不允许定义便初始化..原创 2022-04-23 11:00:17 · 685 阅读 · 0 评论 -
一文彻底解决C++中的重载、重写和隐藏操作
一文彻底解决C++中的重载、重写和隐藏操作往期C++系列相关内容:C++ 类中静态成员和静态成员函数的继承覆盖C++中的.和->网络相关内容:select、poll、epoll、多线程实现并发请求处理epoll-reactor模型原理代码解析Http解析实现/服务器Get请求的实现epoll的水平触发LT以及边沿触发ET的原理及使用及优缺点UDP的可靠传输/KCP是怎样练成的怎么回答TCP的三次握手问题目录一文彻底解决C++中的重载、重写和隐藏操作重载(overload)重载中的注意事原创 2022-04-21 20:28:28 · 2280 阅读 · 14 评论 -
select、poll、epoll、多线程实现并发请求处理
select、poll、epoll、多线程实现并发请求处理这里写目录标题select、poll、epoll、多线程实现并发请求处理**解决方法1:**多线程**采用IO多路复用实现并发处理客户端请求****解决方法2:select**解决方法3:**poll**解决方法4:**epoll****select、poll、epoll的选择**服务器与客户端建立连接需要使用到一些接口,包括但不限于socket、bind、listen、accept一个简单的服务器网络程序如下: int listenfd,原创 2022-04-08 20:01:13 · 3809 阅读 · 0 评论 -
Http解析实现/服务器Get请求的实现
Http解析实现/服务器Get请求的实现目录Http解析实现/服务器Get请求的实现HTTP简介客户端请求消息服务器响应消息请求报文的解析响应报文的发送文件发送sendfile函数代码结果分析之前有实现过怎么通过epoll实现socket的数据传输,以及通过reactor模型实现epoll服务器并发,但是程序只实现了数据的接收于重发,并没有涉及Http的协议解析等操作。本文将通过简单的程序解释当客户端发来Http的Get请求时,服务器时如何操作的。HTTP简介HTTP 协议是 Hyper Text原创 2022-04-14 00:48:29 · 4589 阅读 · 12 评论 -
epoll的水平触发LT以及边沿触发ET的原理及使用及优缺点
epoll的水平触发LT以及边沿触发ET的原理及使用及优缺点epoll的水平触发LT以及边沿触发ET的原理及使用及优缺点epoll的水平触发LT以及边沿触发ET的原理及使用及优缺点LT和ET的代码案例:使用水平触发LT或边沿触发ET的结果及处理水平触发和边沿触发的优缺点在IO多路复用的几种方法中,select和poll只支持水平触发,而epoll支持水平触发和边缘触发两种形式,因此在并发网络编程中该如何选择哪种触发方式。epoll的原理不清楚的可以看一下这篇文章link水平触发和边缘触发的不同会影响e原创 2022-04-12 13:48:32 · 2436 阅读 · 2 评论 -
epoll-reactor模型原理及代码解析
epoll-reactor模型原理即代码解析epoll-reactor模型原理即代码解析epoll-reactor模型原理即代码解析epollReactor服务器模型epoll网络IO操作一般会涉及两个系统对象,一个是用户空间调用 IO 的进程或者线程,另一个是内核空间的内核系统,比如发生 IO 操作 read 时,它会经历两个阶段:等待数据准备就绪将数据从内核拷贝到进程或者线程中。不同情况地处理这两个阶段上,可以分为不同的服务器模型,最常用的如Reactor 与 Proactor原创 2022-04-10 19:47:35 · 1579 阅读 · 0 评论 -
C++刷题ACM输入数组
函数功能:输入数组格式12,12,1,4,-1输出vector数组vec={12,12,1,4,-1}#include <iostream>#include <string>#include <vector>using namespace std;int strNum(string str) { //字符串转数字,包括负数判断 int num = 0; int flag = 1; for(int i = 0; i < str.原创 2022-03-10 18:44:11 · 1874 阅读 · 0 评论 -
C语言中结构体用到的typedef
1. typedef常规用法C语言中使用typedef关键字来定义自己习惯的数据类型名称。例如自定义一个BOOL类型typedef int BOOL;#define True 1//使用自定义的BOOL类型BOOL flag = True;2.结构体使用typedef结构体中使用typedefC语言中一般的结构体struct lept_value { double n; };//调用此结构体时struct lept原创 2022-02-06 12:41:54 · 4084 阅读 · 0 评论 -
C++中的.和->
C++中的.和->以及::1. C++中的点(.)的应用如果是一个对象或者引用去调用成员变量或者成员函数函数的话,会使用到点#include <iostream>using namespace std;class Base {public: Base(int a) { val = a; } void fun() { cout << "Base static fun" << endl; }原创 2022-02-04 23:40:46 · 4352 阅读 · 0 评论 -
C++ 类中静态成员和静态成员函数的继承覆盖
C++中子类是否可以继承父类的静态成员和静态成员函数?原创 2021-10-07 23:00:46 · 6951 阅读 · 4 评论 -
头文件ifndef用法及意义#pragma once
头文件定义所有头文件都应该使用 #ifndef来防止头文件被多重包含, 举个例子写三个文件,main.c head1.h head2.hmain.c#include <iostream>#include "head1.h"#include "head2.h"using namespace std;int main(){ cout << "Hello World!\n"; return 0;}head1.h#ifndef HEAD1_H_#define H原创 2021-09-27 11:17:06 · 887 阅读 · 0 评论 -
冒泡排序的优化版本
void bubbleSort(vector<int>& nums) { int n = nums.size(); bool flag = false; for (int i = 0; i < n - 1; ++i) { flag = false; for (int j = 0; j < n - 1 - i; ++j) { if (nums[j] > nums[j + 1]) { //某一趟排序中,只要发生一次元素交换,flag就从false变为了原创 2021-09-23 22:49:56 · 78 阅读 · 0 评论