
C++技术总结
文章平均质量分 56
segen_jaa
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++中一个P0级的磁盘清空问题复盘
事件背景一个小伙伴开开心心写了一段文件夹删除代码,不过在自测的时候出现了事故。整个C盘文件被一扫而空,不得不重装系统,珍藏资料也难以找回。问题排查先上源码。警告:此源码切勿运行#include <string>std::wstring dirBackSlashAlign(const std::wstring& strDir){ std::wstring strTemp = strDir; if (!strTemp.empty() &&原创 2020-08-14 23:57:51 · 364 阅读 · 0 评论 -
C++中实现不可复制的类
使用场景在C++中实现不可复制的类,源码剖析的是boost中的noncopyable类。C++11实现要实现对象的不可复制,需要在拷贝构造和赋值操作上做文章。C++11中比较优雅,直接用= delete做函数删除即可。default关键字指使用编译器默认生成的函数,不再自己实现构造和析构。具体代码如下。 class noncopyable { public: noncopyable() = default; ~noncopyable()原创 2020-08-13 22:01:17 · 391 阅读 · 0 评论 -
C++技术问题总结-第12篇 设计模式原则
设计模式六大原则,参见http://www.uml.org.cn/sjms/201211023.asp。 1. 单一职责原则定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。 问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。解决方案:遵循单一职责原则。分别建原创 2014-10-10 15:09:34 · 1165 阅读 · 0 评论 -
C++技术问题总结-第11篇 网络通信中主机序网络序
网络通信经常涉及到字节序转化,接下来理解主机序和网络序有什么异同。①主机字节顺序HBO(Host Byte Order)采用小头序(little-endian),从低到高的顺序存储。低位字节排放在内存的低地址端,高位地址排放在高位地址端。②网络字节顺序NBO(Network Byte Order)采用大头序(big-endian),从高到低的顺序存储。高位字原创 2014-10-10 14:26:56 · 1347 阅读 · 0 评论 -
C++技术问题总结-第15篇 内存泄露有哪些方法定位,崩溃有哪些方法定位
Visual C++内存泄露检测,可采用VLD工具。 VLD:Visual Leak Detector。VLD是一款用于Visual C++的免费的内存泄露检测工具。他的特点有:可以得到内存泄漏点的调用堆栈,如果可以的话,还可以得到其所在文件及行号;可以得到泄露内存的完整数据;可以设置内存泄露报告的级别;并且是开源免费的。 官方网址:http://vld.codep原创 2014-12-15 14:19:13 · 2749 阅读 · 0 评论 -
C++技术问题总结-第14篇 常用设计模式及其应用场景
设计模式是对设计原则的具体化。用江湖话说就是武林秘籍,总结出来的一些固定套路,编程界的《葵花宝典》。个人意见,编程过程中设计原则进行遵循,对设计模式进行借鉴。完全按照套路来,有时反而简单问题复杂化。 常用的模式及其场景如下。1) 单例模式。 单例模式是一种常用的软件设计模式。 在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保原创 2014-12-12 17:23:10 · 4290 阅读 · 0 评论 -
C++技术问题总结-第13篇 调用约定有哪些,有什么不同
调用约定(Calling convention),决定以下内容:a. 函数参数的压栈顺序。b. 由调用者还是被调用者把参数弹出栈。c. 以及产生函数修饰名的方法。 常用的调用约定为__stdcall、__cdecl、__fastcall。1) __stdcall。StandardCall的缩写,约定内容:a. 参数从右向左压入堆栈。b. 函数被调用者修改堆栈。原创 2014-12-12 11:22:22 · 1040 阅读 · 0 评论 -
虚函数相关问题探索
虚函数相关问题探索本篇文章中对虚函数做五个方面的探索。 1) 虚函数单一继承对象模型。 2) 虚表指针与虚表的创建释放时机。 3) 析构函数设置为虚函数。 4) 构造函数调用虚函数。 5) 析构函数调用虚函数。1. 虚函数单一继承对象模型 参见网址:http://www.cnblogs.com/taoxu0903/archive/2008/02/04/1064234.ht原创 2015-06-30 17:19:54 · 865 阅读 · 0 评论 -
智能指针仿真-003-共享智能指针
1. 概述 本篇对共享所有权的智能指针进行仿真。 仿真指针主要有:boost/c++ 11 tr1中的shared_ptr、weak_ptr。 boost与c++ 11 tr1的关系这里稍微做一下类比,shared_ptr在boost中时可以认为是储君(准标准),进入到了tr1之后就正名了就算正式登基了是完全标准的了。2. this指针的探讨 this指针是编译器默认生成到成员函原创 2015-09-20 15:42:45 · 772 阅读 · 0 评论 -
C++技术问题总结-第8篇 STL内存池是怎么实现的
STL内存池机制,使用双层级配置器。第一级采用malloc、free,第二级视情况采用不同策略。这种机制从heap中要空间,可以解决内存碎片问题。1.内存申请流程图 简要流程图如下。2.第二级配置器说明 第二级配置器目的解决小型区块造成的内存碎片问题。 使用自由链表(free-list)技巧。主动将任何小额区块的内存需求量上调至8的倍数。如需求30,则原创 2014-09-04 10:15:16 · 2815 阅读 · 0 评论 -
C++技术问题总结-第7篇 map、vector、list、deque各自的使用场合
map是关联式的,vector、list、deque是序列式的。 map:底层机制RB-tree(红黑树),元素自动排序,键值对。 vector:操作方式与array相似,动态空间增长。是连续性空间,支持随机访问。 优点:Ø 内存动态增长,不需要指定内存大小。Ø 支持随机访问,即支持[]和vector.at()。 缺点:Ø 在内部进行插入原创 2014-08-27 17:23:42 · 2047 阅读 · 0 评论 -
C++技术问题总结-第0篇 类型转换
从今天开始,对C++常用技术做个总结。参考书籍:《C++Primer》、《C++对象模型》、《设计模式》、《Windows核心编程》、《STL解密》。1. static_cast等四个cast的具体意义C++类型转换:隐式转换和显式转换。显式转换:static_cast、dynamic_cast、reinterpret_cast、const_cast。1.1原创 2014-07-24 10:03:10 · 1166 阅读 · 0 评论 -
C++技术问题总结-第3篇 线程同步
线程同步的方法线程同步有多种方法。用户模式下的线程同步:关键段(critcal section)。内核模式下的线程同步:事件、计时器、信号量、互斥量。1.关键段用户模式下的同步,主要API如下。InitializeCriticalSection、DeleteCriticalSection、EnterCriticalSection、LeaveCriticalSection原创 2014-08-07 14:42:42 · 1237 阅读 · 0 评论 -
C++技术问题总结-第1篇 内存布局
进程中内存的布局参见:http://patmusing.blog.163.com/blog/static/135834960201001512358686/常量区只读不可写。静态区可读写。示例//所有代码,在Code segment//在Global data segment,const只是个语法标识,不放Constant segmentconst double原创 2014-07-28 15:41:43 · 932 阅读 · 0 评论 -
C++技术问题总结-第9篇 智能指针
智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,能够在适当的时间自动删除指向的对象外,能够确保正确的销毁动态分配的对象。标准库的智能指针为auto_ptr。boost库的智能指针族在功能上做了扩展。1.auto_ptr auto_ptr注意事项如下。①auto_ptr不能共享所有权。②auto_ptr不能指向数组。③auto_ptr不能作为原创 2014-09-05 14:40:42 · 1235 阅读 · 0 评论 -
C++技术问题总结-第6篇 STL迭代器相关
1、STL为什么要用迭代器 iterator模式定义:提供一种方法,使之能够依序巡访某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表述方式。 STL的中心思想在于:将数据容器(containers)和算法(algorithms)分开,彼此独立设计,最后再以一贴胶着剂将它们撮合在一起。迭代器便起这个作用。 2、迭代器是怎么实现的 迭代器实现示例。原创 2014-08-25 17:36:49 · 1029 阅读 · 0 评论 -
C++技术问题总结-第10篇 MFC中SendMessage与PostMessage异同
应用程序消息有三个来源:硬件消息(鼠标键盘等外设)、PostMessage消息、SendMessage消息,都可以发送消息事件来驱动程序执行。消息流图如下。硬件消息响应流程如下。①消息进入系统消息队列。②消息分发到应用程序消息队列。③应用程序循环获取消息。④消息处理函数执行。PostMessage直接进入上述步骤②,将消息放入消息队列中,然后立刻返回。Sen原创 2014-09-09 16:04:10 · 1939 阅读 · 0 评论 -
C++技术问题总结-第5篇 TCP三次握手
TCP三次握手TCP提供可靠的连接服务,采用三次握手确认建立一个连接。TCP标志位有6种。SYN:synchronous建立联机。ACK:acknowledgment确认。PSH:push传送。FIN:finish结束。RST:reset重置。URG:urgent紧急。三次握手主要依靠的是SYN和ACK标志位。握手详细流程图如下。简化步骤原创 2014-08-14 16:25:06 · 2128 阅读 · 0 评论 -
C++技术问题总结-第4篇 TCP与UDP
TCP、UDP各自client、server端描述TCP、UDP位于传输层,基于IP协议。1.TCPTCP:Transmission Control Protocal 传输控制协议。服务器与客户端执行流程如下。API说明。创建套接字:SOCKET localSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);原创 2014-08-14 16:23:19 · 1103 阅读 · 0 评论 -
C++技术问题总结-第2篇 进程通信
进程通信的方法进程通信基本方法有如下几种。1、消息传递机制。2、共享内存。3、管道和邮槽。4、剪贴板。5、Socket通信。1.消息传递机制使用WM_COPYDATA实现进程间的传递数据。函数原型LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam)参数hWnd:其窗原创 2014-08-06 14:31:28 · 1498 阅读 · 0 评论