![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 60
ghscarecrow
这个作者很懒,什么都没留下…
展开
-
记录一次项目上线后遇到的坑(map相关)
开发中遇到的一个map的坑原创 2023-02-19 11:08:29 · 186 阅读 · 0 评论 -
【工具篇】CMake简单入门教程总结
从事linux的开发工作,不可避免的需要进行编译构建的工作,相比在Windows上的使用VS直接开发c++程序,在Linux上开发c++程序,需要直接编辑Makefile,不仅需要熟悉Makefile的语法,还需要知道依赖和推导规则,比较麻烦。而CMake是开源、跨平台的构建工具,可以让我们通过编写简单的配置文件去生成本地的Makefile,这个配置文件是独立于运行平台和编译器的,这样就不用亲自去编写Makefile了,而且配置文件可以直接拿到其它平台上使用,无需修改,非常方便。学会该工具的使用,无疑是性.原创 2022-05-29 17:10:26 · 938 阅读 · 0 评论 -
malloc底层实现及原理总结
总结当开辟的空间小于128KB时,会调用brk()函数,其主要时移动指针_edata(此时的_edata指的是Linux地址空间中堆段的末尾地址)当开辟的空间大于128KB时,调用mmap()在虚拟地址空间中(堆和栈的中间,称为“文件映射区域”的地方)找一块空间来开辟具体内容当一个进程发生缺页中断的时候,进程会陷入核心态,执行以下操作检查要访问的虚拟地址是否合法查找/分配一个物理页填充物理页内容(读取硬盘,或者直接置0,否则什么都不做)建立映射关系(虚拟地址到物理地址的映射关系)继续原创 2022-04-13 20:40:17 · 411 阅读 · 0 评论 -
一次std::sort函数的踩坑记录
**问题:**最近收到一个反馈,有一个活动导致进程挂了,上去一瞧,发现居然是sort函数导致的宕机。。。原因在于自定义的比较函数将相等元素返回了true,函数大致如下:bool cmp(const A& obj1, const A& obj2){ return obj1.val >= obj2.val;}**问题的原因:**算是一个坑了。使用std::sort时,比较函数如果是大于等于或小于等于,可能会导致越界行为发生**问题的解决:**需要把比较函数的逻辑修改为当元素原创 2022-03-13 11:14:07 · 1101 阅读 · 0 评论 -
记录一次指针指向内存被修改的问题
最近遇到了一个奇妙的问题,在一个抽奖活动里抽奖偶尔会出现发给客户端的数据不正确的情况,结果初步排查,发现这是由于有一个指针指向的对象里的数据发生了错乱。而且很奇妙的,经常是抽了好几十次才出现一次这种情况先来看一段代码const Item* OnePiece::getRandItem(Lib* pLib, const std::set<DWORD>& extraSet){ std::vector<Item>& itemListCfg = pLib->it原创 2022-03-10 21:04:21 · 1452 阅读 · 0 评论 -
c++中成员函数的参数名与成员变量名重名导致的问题
最近开发时遇到一个坑,就是成员函数的参数名与成员变量名重名导致赋值失败。先来看看下面这份代码class PartUnit{public: PartUnit():userId(0), isRobot(0){} ~PartUnit(){} void initData(unsigned int userId, int isRobot);private: unsigned int userId; int isRobot;}void PartUnit::initData(unsigned i原创 2022-03-02 16:25:41 · 2005 阅读 · 0 评论 -
c++11实现一个简单的线程池
#ifndef THREAD_POOL#define THREAD_POOL#include <mutex>#include <condition_variable>#include <queue>#include <thread>#include <functional>#include <assert>class ThreadPool{public: explicit ThreadPool(size_原创 2022-01-09 17:35:46 · 313 阅读 · 0 评论 -
自定义数据结构想要使用 std::set 需要重载哪些操作符
在利用自定义数据结构套用 STL的set 的时候,比如说,std::set 是有序的,它就需要你重载一个operator< 操作符;// Operator < overridebool operator<(const Point& rhs) const { return (x + y) < (rhs.x + rhs.y);}再比如说,你想要利用 std::find 来将一个 std::vector 中的自定义数据结构对象进行查找,这里就隐含需要调用自定义数原创 2021-11-30 16:32:34 · 703 阅读 · 0 评论 -
分析obj文件探索编译器何时生成默认构造函数
前言提起构造函数,很多人都不陌生,在学习C++的时候,我们经常会听到“默认构造函数”的函数,并一直有一个传统认知,就是说在一个类的定义中,如果程序员没有定义任何构造函数的话,编译器会隐式地生成一个默认的构造函数,并称之为“合成默认构造函数”。那么,如果程序员没有定义任何构造函数,编译器是否会生成一个“合成默认构造函数”呢?我们接下来就来探索一下前提知识在C++中,如果要生成一个可执行文件,需要经过编译、链接的步骤,一个.cpp的文件,经过编译,就会生成一个.obj(或者.o)文件,这个文件也叫作目标文原创 2021-10-06 19:42:57 · 179 阅读 · 0 评论 -
C++类对象大小规则总结
规则成员函数不占类对象的内存空间一个类对象至少占1字节内存空间成员变量是包含在每个对象中,占字节的成员函数虽然也写在类定义中,但成员函数不占类对象的字节空间,也就是说,成员函数是跟着类走的,跟类对象没有关系,不管用这个类产生了多少个该类的对象静态成员变量不计算在对象的sizeof内普通成员函数和静态成员函数不计算在sizeof内虚函数不计算在对象的sizeof内,但虚函数会让对象的sizeof增加4字节以容纳指向虚函数表的指针虚函数表是基于类的如果类中有多个数据成员,那么为了访问速度和性原创 2021-10-06 15:30:12 · 887 阅读 · 0 评论 -
聊聊STL中的vector的扩容
文章目录前言原理capacity和size影响前言在平时的开发中,vector可以说是用得最多的STL容器之一了。我们都知道为了支持快速的随机访问,vector的底层是用数组实现的。在内存中,vector将元素连续存储,而vector的size也会随着我们添加的元素的增多而变大。不同于原生的数组需要我们在声明时就得指定数组的大小,这无疑给我们的开发工作带来了很多便利,那么,vector这个类究竟在底层做了什么呢?原理在标准类库中,当我们采用push_back操作,往vector中添加元素时,若此时v原创 2021-04-11 11:44:35 · 726 阅读 · 0 评论 -
C++中的菱形继承
前言与Java等其他语言不同,C++中支持多重继承。然而,这种多重继承往往会导致很多问题的出现。比如说出现的菱形继承问题。问题什么是菱形继承呢?先来看下面这幅图#mermaid-svg-9Q1LAyi3YqGBX040 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-9Q1LAyi3YqGBX040 .l原创 2021-04-11 11:02:48 · 123 阅读 · 0 评论 -
C++中常见的未定义行为
文章目录前言总结数组越界问题非法多次释放同一块内存空间不恰当使用容器的erase操作其他前言在一些程序语言中,在某些情况下存在着一些未定义行为,其中以C和C++最为著名,在C++中,规定某些操作的行为是未定义的。这些未定义行为往往会导致一些程序的错误问题的出现,作为一名合格的程序员,应该极力避免这些未定义行为的出现,让程序的运行结果不会说出现不确定的情况。总结在C++中的常见的未定义行为主要有以下几种:数组越界问题在C++中,数组越界问题是一个重灾区,也是很多人容易疏忽的点。比如以下的程序co原创 2021-04-04 15:32:08 · 2070 阅读 · 0 评论 -
C++中的智能指针
文章目录前言shared_ptr类unique_ptrweak_ptr前言在C++中,除了静态内存跟栈内存外,每个程序还有一个内存池,这部分内存都被称作自由空间或者堆。这部分内存的管理是通过一对运算符来完成的,即new跟deletenew:在堆内存中为对象分配空间并返回一个指向该对象的指针,我们可以选择对该对象进行初始化delete:接收一个动态对象的指针,销毁该对象,并释放与之相关联的内存空间众所周知,内存管理一直是C++程序员在使用C++语言时的一个难点,C++不像Java等其他语言一样,有G原创 2021-04-04 10:45:16 · 97 阅读 · 0 评论 -
C++的STL常用容器及函数(一)
前言:最近在刷oj,用到了不少C++的STL里面的类。虽然学校的课堂上没有讲过这些,但由于自己之前在啃《C++ Primer》的时候多多少少也了解到一些,所以一些常用的类还是知道的,但还是不得不感慨,人的记忆力啊...多多少少也遗忘了一些。现在又重新学习了STL里常用类及函数,为了避免以后忘记了,就来好好做个总结吧!目录vector类认识使用list类认识使用vec...原创 2018-08-27 11:16:38 · 1218 阅读 · 0 评论