随笔分类 - C++面对对象
摘要:1. 简介 IOCP模型属于一种通讯模型,适用于Windows平台下高负载服务器的一个技术。在处理大量用户并发请求时,如果采用一个用户一个线程的方式那将造成CPU在这成千上万的线程间进行切换,后果是不可想象的。而IOCP完成端口模型则完全不会如此处理,它的理论是并行的线程数量必须有一个上限-也就是说
阅读全文
摘要:为了解决C++内存泄漏的问题,C++11引入了智能指针(Smart Pointer)。 智能指针的原理是,接受一个申请好的内存地址,构造一个保存在栈上的智能指针对象,C++中有一个重要原则,在函数结束时(不论是正常返回,还是因为异常除法的对战回退),会将所有栈对象销毁,也就是会调用所有栈对象的析构函
阅读全文
摘要:make命令和makefile文件的结合提供了一个在项目管理领域十分强大的工具,它不仅常被用于控制源代码的编译,而且还用于手册页的编写以及将应用程序安装到目标目录。 makefile文件由一组依赖关系和规则构成,每个依赖关系由一个目标和一组该目标所依赖的源文件组成,而规则描述了如何通过这些依赖文件创
阅读全文
摘要:1. 视图的同步更新 UpdateAllViews >OnUpDate >WM_PAINT >OnDraw UpdateAllView(NULL) 表示更新所有视图 同时也可以根据UpdateAllViews中的第二个第三个参数实现只更新需要重绘区域,提高效率 UpdateAllViews源码如下:
阅读全文
摘要:1. 思路 有的人一看到这个题,很简单嘛最麻烦的就是从头遍历一遍的事情嘛. 不过要看清楚题! 40亿个无符号整数. 我们生活中1G内存占用的字节数1024*1024*1024为1073741824个字节.粗略就是10亿个字节. 而40亿个无符号整数是160亿个字节. 也就是这些数据存储下来需要16G
阅读全文
摘要:1. vector实现框架 2. 空间配置器 空间配置器方面的内容在之前的博客已进行详细说明,查看->STL空间配置器解析和实现. 3. 内存基本处理工具 (1)对象构造 (2)Destroy()函数的泛化和特化版本实现,主要体现对象T是否包含trivial construct (3)迭代器范围赋值
阅读全文
摘要:哈希(散列)技术既是一种存储方法,也是一种查找方法。然而它与线性表、树、图等结构不同的是,前面几种结构,数据元素之间都存在某种逻辑关系,可以用连线图示表示出来,而哈希技术的记录之间不存在什么逻辑关系,它只与关键字有关联。因此,哈希主要是面向查找的存储结构。哈希技术最适合的求解问题是查找与给定值相等的
阅读全文
摘要:相信大家看到swap这个词都一定不会感到陌生,就是简单的元素交换。但swap在C++ STL中散发着无穷的魅力。下面将详细的说明泛型算法swap和容器中的swap成员函数的使用! 1. 泛型算法swap swap的函数原型: vect中swap成员函数实现源码: 仅仅是交换了指向的首尾指针和容量指针
阅读全文
摘要:1. 一级空间配置器实现 1.1 接口 1.2 实现 2. 二级空间配置器实现 2.1 接口 2.2 实现 3. 配置器标准接口 4. 测试
阅读全文
摘要:1. 内存对齐 上面的代码演示了采用#pragma pack()方法实现内存对其。接下来介绍C++11中相关内存对其的方法。 1.1 alignas alignas指定内存对其大小,有时候我们希望不按照默认的内存对齐方式来对齐,这时我们可以用alignas来指定内存对齐。 在C++11中,只要是一个
阅读全文
摘要:1. 右值引用 个人认为右值引用的目的主要是为了是减少内存拷贝,优化性能。 比如下面的代码: str为临时对象,然后调用Stringd的拷贝构造函数,将临时对象的值赋值给String,这种拷贝是完全没有必要的,如果堆内存很大,那么这个拷贝构造的代价会很大,带来了额外的性能损耗。 为了避免链式对象的拷
阅读全文
摘要:用过DLL的人都会发现,在C++中调用dll中的函数有点繁琐,调用过程如下:在加载dll后还要定义一个对应的函数指针类型,接着调用GetProcAddress获取函数地址,再转成函数指针,最后调用函数。如果一个dll中有上百个函数,这中繁琐的定义会让人不胜其烦,下面将使用C++新特性中的多参数模版、
阅读全文
摘要:C++11增加了unicode字面量的支持,可以通过L来定义宽字符:str::wstring str = L"中国人"; 将宽字符转换为窄字符串需要用到codecvt库中的std::wstring_convert 例:
阅读全文
摘要:C++11之前没有对并发编程提供语言级别的支持,这使得我们在编写可移植的并发程序时,存在诸多的不便。现在C++11增加了线程以及线程相关的类,很方便地支持了并发编程,使得编写的多线程程序的可移植性得到了很大的提高。 1. 线程 1.1 线程的创建 #inclde <thread> std::thea
阅读全文
摘要:在患者就医时,医生会根据病情开具处方单,很多医院都会存在以下这个流程:划价人员拿到处方单之后根据药品名称和数量计算总价,而药房工作人员根据药品名称和数量准备药品,如下图所示。 在软件开发中,有时候也需要处理像处方单这样的集合对象结构,在该对象结构中存储了多个不同类型的对象信息,而且对同一对象结构中的
阅读全文
摘要:相信大多数的人都看过《西游记》,对孙悟空拔毛变出小猴子的故事情节应该都很熟悉。孙悟空可以用猴毛根据自己的形象复制出很多跟自己一模一样的小猴兵出来,其实在设计模式中也有一个类似的模式,我们可以通过一个原型对象来克隆出多个一模一样的对象,这个模式就是原型模式。 一 大同小异的工作周报 M公司一直在使用自
阅读全文
摘要:现在在大力推行节约型社会,“浪费可耻,节俭光荣”。在软件系统中,有时候也会存在资源浪费的情况,例如,在计算机内存中存储了多个完全相同或者非常相似的对象,如果这些对象的数量太多将导致系统运行代价过高。那么,是否存在一种技术可以用于节约内存使用空间,实现对这些相同或者相似对象的共享访问呢?答案是肯定的,
阅读全文
摘要:相信大家都玩过类似于“斗地主”的纸牌游戏,某人出牌给他的下家,下家看看手中的牌,如果要不起,则将出牌请求转发给他的下家,其下家再进行判断。一个循环下来,如果其他人都要不起该牌,则最初的出牌者可以打出新牌。在这个过程中,纸牌作为一个请求沿着一条链在传递,每一位纸牌的玩家都可以处理该请求。在设计模式中,
阅读全文
摘要:树形结构在软件中随处可见,比如操作系统中的目录结构,公司组织结构等等,如何运用面向对象的方式来处理这种树形结构是组合模式需要解决的问题。组合模式通过一种巧妙的设计方案来使得用户可以一致性地处理整个树形结构或者树形结构的一部分,也可以一致地处理树形结构中的叶子节点(不包含子节点的节点)和容器节点(包含
阅读全文
摘要:在现实生活中,我们常常会用到两种或多种类型的笔,比如毛笔和蜡笔。假设我们需要大、中、小三种类型的画笔来绘制12中不同的颜色,如果我们使用蜡笔,需要准备3*12=36支。但如果使用毛笔的话,只需要提供3种型号的毛笔,外加12个颜料盒即可,涉及的对象个数仅为3+12=15,远远小于36却能实现与36支蜡
阅读全文