
C++
一支春夏、几多秋冬
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux程序崩溃调试
一般而言,项目不会主动加-g来带调试信息,毕竟可执行文件太大了也不够友好。另外,更主要的是,关键时候还不保证会生成core dump文件。这种情况大多是实际要面临的,也是Interviewer喜欢问得。编译时主动带-g,生成的程序带调试信息,而且开启生成dump文件,这时候可以使用core dump来调试程序,定位问题。三、再复杂点:如果core dump文件的堆栈信息被破坏了,又该如何定位问题呢?原创 2024-03-06 16:07:55 · 639 阅读 · 0 评论 -
无锁序列系列笔记
下面是常见的一些实现方式:1、借助智能指针来实现。下面是一篇2、借助automic使用CAS(Compare And Swap)原子操作,std::atomic_flag,不同于所有 std::atomic 的特化,它保证是免锁的,不提供load()与store(val)操作,但提供了test_and_set()与clear()操作,其中test_and_set()就是支持RMW的原子操作,可用std::atomic_flag实现自旋锁的功能。原创 2024-02-04 16:18:43 · 378 阅读 · 0 评论 -
编码注意事项
1、默认值1、默认值的问题主要体现在以下几个场景局部变量。由于局部变量不会在声明时被初始化,因此它的值也是未知的,如果不对它初始化,那结果显然是未知的函数出参、返回值。对于有返回值的函数,无论是否完整走完内部逻辑、亦或是因缺失不必要条件而同样完整走完内部逻辑(比如读文件时文件不存在依然会创建文件),都应该有一个表示"计算过程"的默认值,当然这个值应正确代表逻辑执行的情况...原创 2020-03-25 09:56:20 · 441 阅读 · 0 评论 -
C++ 编译时多态和运行时多态
前言 多态多为C++的三大特性之一,我们对此的了解和应用大多停留在类继承层次和运行时阶段。那既然有运行(动态)时阶段,那是否也有静态的多态?有,那就是编译时多态正文 动态多态 运行时的多态存在于继承类中,通过虚函数实现动态选择调用。简单的说就是通过一张虚函数表——vptable,vptable中记录了基类的虚函数地址,在派生类中继承了基类的这张vptable,而且在派...原创 2020-01-07 18:02:41 · 8759 阅读 · 1 评论 -
定位new——placement new
前言 placement new是用来在指定的内存上创建对象,而不是直接在堆栈上创建对象。好处就字然不用多说,一方面避免了大内存申请失败的情况,另一方面对那些效率要求严格的场景也有了改善正文 既然是在指定的内存上创建对象,那么这块内存又是如何被创建出来的?我们来看这块缓冲内存的创建方式缓冲内存的创建方式 *栈区. class CTest; char szBuff[...原创 2019-12-31 14:45:45 · 278 阅读 · 0 评论 -
C++面试汇总
前言:总结一些常见的面试和笔试题,温故知新。直接点击下方链接,可以看具体文章信号槽连接方式同步、异步、阻塞和非阻塞c++基础智能指针const_cast、static_case、dynamic_cast和reinterpret_cast详解定位new(placement new)乐观锁和悲观锁...原创 2019-12-27 10:57:55 · 137 阅读 · 0 评论 -
c++面试基础
全局变量的初始化顺序以及初始化方式初始化时机*静态初始化.发生在程序加载过程中(可以理解成编译时),对一些简单类型完成用常量对变量的初始化*动态初始化.在main加载前,通过函数调用完成的,或者对一些复杂的类、结构体(调用构造函数)完成初始化。需要说明的是,静态初始化是早于动态初始化的。使用#pragma init_seg(lib)指令,来确保某些全局对象先于其他普通...原创 2019-12-31 09:34:46 · 139 阅读 · 0 评论 -
同步、异步、阻塞和非阻塞
同步和异步是相对于消息通信机制(访问数据的机制)而言,阻塞和非阻塞是对数据的状态而言阻塞:就是一直等一件事,直到它干完了为止。在等待的期间什么也不干非阻塞:在等待过程中,可以不用一直等,能够做其他事同步:主动去询问数据的结果异步:被动通知数据的结果。同步一般指主动请求并等待I/O操作完毕的方式,当数据就绪后在读写的时候必须阻塞,异步则指主动请求数据后便可以继续处理其它任务,随后等待...原创 2019-12-30 17:11:37 · 166 阅读 · 0 评论 -
C++ createEvent和WaitForSingleObject配合使用详解
前言 线程同步技术之一:Event,事件作为多线程同步的重要方式之一,学习它的使用是多线程编程必不可少的步骤,我们通过几个函数来分例剖析下该线程同步方法正文 事件的创建通过createEvent函数实现,下面是函数的介绍:The CreateEvent function creates a named or an unnamed event object. ...原创 2019-12-26 16:16:56 · 2164 阅读 · 3 评论 -
C++ 类成员函数指针数组应用(三)
上两篇文章由浅到深讲了函数指针数组的应用,本篇文章我们来实现更复杂的场景应用场景 同样是switch场景,但是现在客户需求又复杂了(产品经理真是令人操蛋啊,不管能不能实现就答应客户。为了解决问题,诞生了各种奇淫技巧、骚操作,所以说需求驱动技术,扯远了....)。不仅函数名不一样,连形参列表个数都要动态确定,所幸返回类型相同实现 我们仍希望通过函数指针数组来管理,那...原创 2019-12-21 01:16:00 · 452 阅读 · 0 评论 -
C++ 类成员函数指针数组应用(二)
上一篇C++ 类成员函数指针数组应用(一)我们讲了函数指针数组的基础应用,本篇我们升级扩展下假设有下列场景: 同样是建立在swirch多分枝下,但是处理case的函数返回类型不同,甚至形参列表都不一样,我们还能接着用函数指针数组吗?答案是肯定的。先来一波简单的,最终实现下一篇讲解升级1:索引项由int升级为字符串,并使用map存储函数指针 为了往更复杂的场景...原创 2019-12-20 19:36:36 · 674 阅读 · 0 评论 -
C++ 类成员函数指针数组应用(一)
前言 阅读本文之前你需要明确知道函数指针和普通函数的区别,对这两者本文不做过多说明目标 使用函数指针数组建立一套bpm工作流框架。这套框架在各种oa以及某几个大型通信公司应用的很广泛适应场景 多分枝(类似Swtich)条件下、处理函数的形参列表和返回类型相同。如:int func1(const char *pszContent);int func2(co...原创 2019-12-20 16:55:28 · 2224 阅读 · 1 评论 -
qt/C++从源文件到可执行文件的编译过程
从源文件(.c,.cpp,.h)到可执行文件(.exe,.dll——不是只有exe才叫可执行文件)依次经历下面几个过程预处理阶段 尽管现在编译器都包含了预处理器,但是通常预处理是独立编译阶段的。也有的称这一阶段为预编译阶段。预处理主要对条件编译指令及对宏定义的展开(替换)和对#include的处理等(注意:保留所有的#pragma编译指令,因为编译器需要使用它们),...原创 2019-12-19 21:19:32 · 743 阅读 · 0 评论 -
C99 stdint.h header and MS Visual Studio
解决方法:#ifdef _MSC_VERtypedef __int32 int32_t;typedef unsigned __int32 uint32_t;typedef __int64 int64_t;typedef unsigned __int64 uint64_t;#else#include <stdint.h>#endif原创 2019-11-14 19:09:47 · 142 阅读 · 0 评论 -
复杂结构体的初始化
假若有以下结构体:typedef struct Content_Item{ unsigned short x; //文字项x坐标 unsigned short y; //文字项y坐标 char szFont[2]; //字体样式 unsigned short nSize; //字体大小 char szColor[13]; //字颜色 unsigned short nLet...原创 2019-10-18 16:21:02 · 851 阅读 · 0 评论 -
如何理解“函数的调用是依赖指针的原始类型而不管它实际上指向何种对象”
标题来源于《深入浅出mfc 第二版》转载请标明出处意思是:当通过指针调用函数时,起决定作用的是指针的类型而非指针指向对象的类型。我们来分析下这里面的信息,首先剖析下指针。如下:int* p1;一个指针包含四部分信息:指针的类型、指针的值、指针指向的类型,指针指向的值。那么上面p1的类型是int*,值是一个四字节的地址(区别于引用,指针自身就占用内存),指向的类型是int...原创 2019-09-28 00:03:08 · 178 阅读 · 0 评论