自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 关于C++11右值引用

右值引用、std::move、std::forward、移动构造

2022-12-16 22:53:00 161 1

原创 关于C++多态的实现手段-虚函数表

前几天面试被问到了这个,当时没有回答上来,可能还是没有理解,(之前也看过相关的文章,但写的都过于复杂),今天新自调试了一次,把结果拿出来分享一下1、虚函数表是什么东西,是如何存在的?是什么时候创建的?虚函数表实际上就是一个函数指针数组,如果我们定义了n虚函数,那个这个数组个数就是n。这个指针属于顶级父类,所以多继承,继承了几个父类,就有几个虚函数表从我调试分析,虚函数表的地址是固定的,也就是说这个东西不是实例创建的时候才生成的,而是程序一运行起来就有的,也就是编译时期确定好的2、虚函数表

2021-10-16 10:40:27 101

原创 关于vs中 MT/MD/MTd/MDd的区别

在不引用第三方库的时候,很少会折腾这几个选项,但如果引用了第三方库,就要看清楚第三方使用的是这个四个中的哪一个了注意:有个时候还会有一个UNICODE的库,这里不做说明了。首先,这四个选项是针对C运行时库(CRT)的不同版本编译出来的,在工程-》属性-》C/C++-》code generation->run time里选择后,编译出到。MT MD MTd MDd (...

2019-11-29 15:36:52 673

原创 windbg每次打开丢失符号表的问题

windbg在每次打开的时候。设置的srvdirectionhttp://msdl.microsoft.com/download/symbols每次都会消失,而设置的绝对路径都在存在。网上搜了一下资料,是这样的:在系统环境变量添加一个 _NT_SYMBOL_PATH 值为srv*d:\symbols*http://msdl.microsoft.com/download/symbols这样I...

2019-09-18 18:12:06 593

原创 svn不能cleanup的问题

svn不能cleanup的问题切换到.svn目录下,打开cmd运行sqlite3.exe.open wc.db.tables 这一步后能看到所有的表,删除wc_lock、work_queue两个表就可以了delete from wc_lock;delete from work_queue;...

2019-08-14 16:43:24 192

原创 C++为什么设计抽象类?

网上也有许多介绍,但我总觉得不能一针见血,根据自己工作实际中用到的,才知道有些时候真的是需要抽象类先说一种场景:A设计了一项功能他把此功能封装成一个类,以类的方式提供,他要把这项功能提供给B、C,我们理所当然的想到他会把源码或者编译成的库+h文件给BC。现在在修改一下这个场景:如果 ABC做的是同一个项目,为了保证代码不重,方便维护。这样就不能再使用上面的方法了,只能将头文件提供给B...

2019-03-17 09:51:48 654

转载 三种工厂模式

这里写自定义目以下是我自己学习设计模式的思考总结。简单工厂模式简单工厂模式是工厂模式中最简单的一种,他可以用比较简单的方式隐藏创建对象的细节,一般只需要告诉工厂类所需要的类型,工厂类就会返回需要的产品类,但客户端看到的只是产品的抽象对象,无需关心到底是返回了哪个子类。客户端唯一需要知道的具体子类就是工厂子类。除了这点,基本是达到了依赖倒转原则的要求。欢迎使用Markdown编辑器新的改变功能快...

2019-03-14 11:36:11 262

转载 两种高效的事件处理模型:Reactor模式和Proactor模式

两种高效的事件处理模型:Reactor模式和Proactor模式  随着IO多路复用技术的出现,出现了很多事件处理模式。同步I/O模型通常由Reactor模式实现,而异步I/O模型则由Proactor模式实现。Reactor模式:Reator类图如上所示,Reactor模式又叫反应器或反应堆,即实现注册描述符(Handle)及事件的处理器(EventHandler),当有事件发生的时候,事件...

2019-02-14 15:10:27 146

原创 std::string、std::wstring 的length()\size()

首先length()与size()的函数实现是一样的,所以只讨论其中一种,就拿length()来说吧差别在string 与wstring,经过调试 string返回的是字节数,而wstring返回的是字符数,比如“中国123” 在string中返回 的是7,而wstring返回的是5...

2019-01-21 14:35:18 2485

原创 kerberos工作原理

 三、kerberos工作原理 3.1麻省理工kerberos论文 这里对论文中的对话进行简要概括。A:我有个主意,我们设计一个工作站系统,把系统软件发在不同服务器上,工作站通过网络练到服务器,访问上面的系统软件。B:我有个问题,比如我找出你的用户名,在你的文件服务器删除你的文件搞破坏怎么办?A:提供服务的机器必须能够确认请求服务的人的身份。我必须让服务器知道我就是我声称的那个人。我...

2018-11-21 10:22:29 380

原创 #pragma data_seg的用法

一个dll 被多个exe加载后,因为有copy-on-write机制,里面的全局变量是不会被相互影响的,但如果想让他们相互影响,可以使用#pragma data_seg("Shared")   int g_data=3;   #pragma data_seg()   #pragma comment(linker,"/section:Shared,rws")  这种写法。同理一个exe有...

2018-10-17 11:01:39 998

原创 关于字节序的理解误区

很多人有一个理解误区,认为网络传输时会将字节序转换为网络字节序。 其实不然,网络传输时是按照原始字节流进行传输的,不做任何的修改,而真正对我们的字节序乱搞的时机是:读取的时候。也就是数据通过网络传输到达目的地后,目的地的机器进行读取的时候,可能会将字节序巅倒过来读。 为什么会这样呢?因为不同的机器默认的字节序不同。所以当我们用某一类型(比如int)来接收过来的数据时,所处理的字节序可能不同。为

2018-02-01 11:27:13 269

原创 COM组件原理

在COM中,接口就是一个象类,每个接口有一个接口ID(uuid)。一个COM组件通常是连续继承下来的类,比如 IUNknow ->IDispath->IXX->CXX。这就形成了一个COM组件,当然组件一般是一个钻石继承的样子,这里为了简化原理把他们当成一个串形继承下来。每个COM组件都有一个CLSID(uuid),这个CLSID是注册的时候写进注册表的。这样就可以通过查询注册表中的CLSID

2017-08-30 11:37:51 2799

转载 C++ STL中哈希表 hash_map介绍

目录(?)[+] 0 为什么需要hash_map用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能。例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改:岳不群-华山派掌门人,人称君子剑张三丰-武当掌门人,太极拳创始人东方不败-第一高手,葵花宝典...这些信息如果保存下来并不复杂,但是找起来比较麻烦

2016-12-26 10:25:02 367

转载 C++中的单例模式(懒汉模式、饿汉模式及线程安全问题)

1 教科书里的单例模式  我们都很清楚一个简单的单例模式该怎样去实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实例的动作由一个public的类方法代劳,该方法也返回单例类唯一的实例。  上代码:  123456

2016-12-13 22:54:16 1371

原创 qt-vs-addin 配置出错 MSVCL.NETMSBUILD 的问题

在vs2013及2015以后,不要使用qt-vs-addin安装。在https://www.qt.io/download-open-source下载Visual Studio Add-in 2.0.0 for Qt5 MSVC 2013 (9 MB)   (info) Visual Studio Add-in 2.0.0 for Qt5 MSVC 2015 (9 M

2016-11-30 11:46:29 1645 1

转载 ssl通信过程

普通的TCP通信无法保证数据的安全,它随时可能被第三方截获而泄漏通信双方之间的隐私,这显然是我们不希望看到的,尤其在跟用户名、密码、个人信息息息相关的通信过程(如网上银行交易、机密文件传输等等)尤其看重数据交互的隐秘性,所以我们常常用SSL协议来建立安全保密的通信,SSL协议能够保证交互双方的数据按密文方式传输,第三方在没有私钥的情况下几乎无法破解,从而到达保密的目的。究竟SSL是如何交互数据来确

2016-11-25 11:36:26 820

转载 IDA反汇编学习-转

IDA Pro是一款强大的反汇编软件,特有的IDA视图和交叉引用,可以方便理解程序逻辑和快速定位代码片断,以方便修改。 IDA视图示例程序下面会通过修改示例程序的输出字符串,来讲解如何使用IDA Pro。#includemain(){ int n; scanf ("%d",&n); if (n > 0) printf("a > 0

2016-11-18 17:23:40 8489

转载 驱动对象与设备对象的关系

----------------以下内容摘自《寒江独钓》-------------------1、驱动对象:  一个驱动对象代表了一个驱动程序。或者说一个内核模块。驱动对象的结构如下(这个结构的定义取自 WDK中的 wdm.h)。下面有一些域用省略号代替。 [plain] view plain copy typedef struct _DRIVER_OBJE

2016-11-11 15:02:30 1846

原创 如何在jsp catalina中加载JVMTI

如何在jsp catalina中加载JVMTI网上有很多讲编写JVMTI(C++编写的动态库)的,但最后都 是使用命令行如: java -agentlib:xxx 来加载的。如果放到jsp环境中如何让他自动加载呢?网上查了很多资料没有找到,最后参考一篇博文中关于java.exe启动参数的设置后才知道,在catalina.bat中加入这一句就可以 了 set JAVA_OPTS=%JAVA_OP

2016-11-10 11:54:24 480

转载 如何利用 WinDbg 进行双机内核调试

其实并不是只有在生成不了转储文件的情形下才能使用双机调试,在任何情况下都是可以使用的,尤其是调试内核问题时,双机调试不必限于转储文件类型,均可获得一切可以获得的信息,相当于完全内存转储了。而且,双机调试可以调试到系统启动阶段和之后任意时刻的问题,这是内存转储做不到的。因此只要满足连接条件,将两台机器相连,我们就可以进行双机调试了。下面我们通过表格比较一下可用的三种连接方式:

2016-09-26 15:28:29 1511

转载 C++如何判断是否在编写64位程序

VC2012 下写 Windows 程序时,有时需要判断编译环境。在之前的文章《判断程序是否运行在 Windows x64 系统下。》里说过如何在运行期间判断系统环境,但在编译时如何判断?  MSDN 里说,VC 有 3 个预处理常量,分别是 _WIN32,_WIN64,WIN32。这三个常量如何使用呢?看起来简单,其实是很困惑的。  在 Win32 配置下,WIN32 在

2016-09-21 16:31:50 4452

转载 MFC之自绘控件

在描绘MFC界面时,MFC自带的控件样式是绝对不满足界面的需求的。所以我们就要在MFC自带控件基础上对控件样式进行重绘。在采用自绘前界面样式 采用自绘后界面样式 是不是自绘控件后看起来正常了很多?自绘控件的步骤:我们以做一个关闭按钮为例先创建一个MFC类继承自CButton。给这个类添加 一个虚函数DrawItem(),一个虚函数PreSubclas

2016-09-13 11:08:05 433

转载 intel cpu

x86:Intel从16位微处理器8086开始的整个CPU芯片系列,系列中的每种型号都保持与以前的各种型号兼容,主要有8086,8088(前面两个是16位CPU),80186,80286(这两个是过渡产品), 80386,80486以及以后各种型号的Pentium芯片[奔腾,P2, P4,赛扬...](这些都是32位CPU)x86-64:x86-64是x86指令集的超集,在x86处理器上可

2016-09-10 08:54:12 439

转载 内嵌汇编(C++中嵌入汇编语句)

原文地址:http://blog.sina.com.cn/s/blog_622bd1660100pdqm.html为了加速游戏,一提起汇编语言,大家也许会感到很神秘。其实如果你学起来就会发现,它并非想象中那样难。特别是内嵌汇编,由于它和C++紧密结合,使你不必考虑很多烦琐的细节(例如输入输出函数的写法),学习起来比较容易。使用内嵌汇编,特别是使用MMX指令,可以大大提高各种游戏中常

2016-09-08 15:10:44 2800

转载 函数调试的反汇编分析

原文地址:http://blog.csdn.net/hudashi/article/details/7820338下面是按调用约定__stdcall 调用函数test(int p1,int p2)的汇编代码假设执行函数前堆栈指针ESP为NNpush   p2    ;参数2入栈, ESP -= 4h , ESP = NN - 4hpush   p1    ;参数1入栈, ESP

2016-09-08 14:34:25 410

原创 static与全局变量的应用

static 局部变量 与全局变量 都可以做到退出块后状态不丢失的效果,那什么时候使用static,什么时候使用 全局变量呢?貌似static更轻量级一些,因为有点单例模式中使用时才产生的效果。但全局变量有static不可胜任的地方:全局变量可以在任何地方访问。但static变量只能在当前域里访问

2016-09-07 13:14:08 569

转载 建议慎用boost::weak_ptr来避免智能指针循环引用

本文摘自:http://blog.sina.com.cn/s/blog_48d4cf2d0100uhgt.html如果让我说C/C++相比拥有GC机制的语言如Java,开发时感觉最大的不同是什么。我想繁琐易错的内存管理肯定会排在第一位。所以自从见到基于RAII的boost智能指针实现,觉得日子好过了很多呵呵。智能指针相比GC,优点很多:效率高计算代价低即时性好。但有一个很致命的

2016-09-05 16:56:24 690

原创 firefox被hao.360劫持的处理方法

firefox被hao.360劫持的处理方法:在浏览器里输入about:support,在右上角点击重置浏览器。

2016-08-30 11:40:31 5426 2

原创 将博客搬到CSDN

为了方便管理博文,决定将新浪博客搬到CSDN.

2016-08-29 21:02:57 751

原创 sendmessage与postmessage的区别

一、函数功能该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而函数PostMessage不同,将一个消息寄送到一个线程的消息队列后立即返回。二、函数原型SendMessage函数的原型为LRESULT SendMessage(  HWND hWnd,  UINT Msg,  WPARAM wParam,  LPARAM lPa

2016-08-29 21:02:54 690

原创 寄存器

AX――累加器(Accumulator),使用频度最高BX――基址寄存器(Base Register),常存放存储器地址CX――计数器(Count Register),常作为计数器DX――数据寄存器(Data Register),存放数据SI――源变址寄存器(Source Index),常保存存储单元地址DI――目的变址寄存器(Destination Index),常保存存储单元地址B

2016-08-29 21:02:52 1096

原创 STL&所有算法

STL算法部分主要由头文件,,组成。要使用STL中的算法函数必须包含头文件,对于数值算法须包含,中则定义了一些模板类,用来声明函数对象。   STL中算法大致分为四类:       1、非可变序列算法:指不直接修改其所操作的容器内容的算法。       2、可变序列算法:指可以修改它们所操作的容器内容的算法。       3、排序算法:包括对序列进行排序和合并的算法、搜索算法以及

2016-08-29 21:02:49 357

原创 C++ 临时对象的创建与防止

我们知道在C++的创建对象是一个费时,费空间的一个操作。有些固然是必不可少,但还有一些对象却在我们不知道的情况下被创建了。通常以下三种情况会产生临时对象:  1,以值的方式给函数传参;  2,类型转换;  3,函数需要返回一个对象时; 现在我们依次看这三种情况:   一,以值的方式给函数传参。  我们知道给函数传参有两种方式。1,按值传递;2,按引用传递。按值

2016-08-29 21:02:47 385

原创 C++ 多态的实现原理--虚函数表

1、明白虚函数表在代码段,实例中存放的是指向表地址的指针2、学会获取虚函数表里的任意函数的地址3、对2的延伸。通过内存的分析认识二级指针的意义。前言本文摘自CSDN。原文地址:http://blog.csdn.net/haoel/article/details/1948051/ C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,

2016-08-29 21:02:44 593

原创 C++中 隐藏、重写(覆盖)解析

本文为博主原创。引用请注明出处。由于重载比较清楚,很多人都明白,不再多说。条件A:父类指针或引用指向子类对象。隐藏:子类中如果有一个函数(无论是否为虚函数,虚函数只在条件A中有用。所以如果没有条件A就无视virtual,把他当做平常函数一样)与父类同名,则继承下来的所有同名函数都被隐藏而不能使用。重写:其实就是父类中加了一个virtual关键字,子类中又重新

2016-08-29 21:02:42 451

原创 C++标准异常

C++标准库异常类继承层次中的根类为exception,其定义在exception头文件中,它是C++标准库所有函数抛出异常的基类,exception的接口定义如下:namespace std {        class exception {        public:                  exception() throw();  //不抛出任何异常

2016-08-29 21:02:39 520

原创 正则表达式

本文目标30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用它。如何使用本教程最重要的是——请给我30分钟,如果你没有使用正则表达式的经验,请不要试图在30秒内入门——除非你是超人 :)别被下面那些复杂的表达式吓倒,只要跟着我一步一步来,你会发现正则表达式其实并没有你想像中的那么困难。当然,如果你看完了这篇教程之后,发现自己明白了很多,却

2016-08-29 21:02:37 362

原创 C++智能详解

一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_ptr、boost::share

2016-08-29 21:02:34 606

原创 fopen文件方式与二进制方式打开文…

C语言fopen()打开文本文件与二进制文件的区别在学习C语言fopen()函数后,知道它的第二个参数是标志字符串。如果字符串中出现'b',则表明是以打开二进制(binary)文件,否则是打开文本文件。那么什么是文本文件,什么是二进制文件呢?从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。     ASCII文件也称为文本文件,这种文件在磁

2016-08-29 21:02:32 6351

C++ explicit通俗解释

C++ explicit关键字在刚学的时候就接触到了,也从各处了解了一些,但始终云里雾里,在闲来无事的时候再仔细研究了一下,自己消化理解了一下,自认为比其他网友总结的精简而不失准确。

2018-10-08

300_Meyers_2014_Effective_Modern_C

C++11新特性

2018-09-30

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除