自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

转载 C++中智能指针的工作原理和简单实现

C++中智能指针的工作原理和简单实现    智能指针:它的一种通用实现方法是采用引用计数的方法。智能指针将一个计数器与类指向的对象相关联,引用计数跟踪共有多少个类对象共享同一指针。    每次创建类的新对象时,初始化指针并将引用计数置为1;    当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数;    对一个对象进行赋值时,赋值操作符

2015-12-31 11:34:22 372

转载 Command命令模式

Command命令模式作用:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。由于“行为请求者”与“行为实现者”的紧耦合,使用命令模式,可以对请求排队或记录请求日志,以及支持可撤销的操作。UML图:Command类,用来声明执行操作的接口ConcreteCommand,将一个接收者对象绑定于一个

2015-08-12 11:35:36 336

转载 设计模式之创建型模式

GoF的设计模式一共23个,可以分为3大类:创建型、结构型和行为型,这篇文章主要讨论创建型。  创建型的设计模式包括:简单工厂(Simple Factory)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)、单例(Singleton)、构造者(Builder)和原型(Prototype),我们分别来讨论。  我们首先来看工厂系列的3个设计模式,它们都

2015-08-11 13:23:37 309

转载 STL

目录(?)[-]向量vector vector列表list list集合set set多重集合multiset set栈stack  stack队列queue queue优先队列priority_queue queue双端队列deque deque映射map 由键值对组成的集合 map多重映射multimap  map向量(vector) [cpp] vie

2015-07-29 09:15:07 264

转载 多线程第四篇 经典线程同步之互斥量Mutex

1、互斥量是一个内核对象,它用来确保一个线程独占一个资源的访问。    互斥量与关键段的行为非常相似,并且互斥量可以用于不同进程中的线程互斥访问资源。使用互斥量Mutex主要将用到四个函数。下面是这些函数的原型和使用说明。1)第一个 CreateMutex函数功能:创建互斥量(注意与事件Event的创建函数对比)函数原型:HANDLE CreateMutex

2015-07-09 13:29:44 381

转载 多线程第三篇 经典线程同步之关键段CS

1、本文首先介绍下如何使用关键段,然后再深层次的分析下关键段的实现机制与原理。定义关键段变量:CRITICAL_SECTION g_csThreadParameter, g_csThreadCode;关键段CRITICAL_SECTION一共就四个函数,使用很是方便。下面是这四个函数的原型和使用说明。1)函数原型:void InitializeCriticalSection

2015-07-09 13:28:08 350

转载 多线程第二篇 多线程中的隐蔽问题揭秘

上一篇《多线程一  CreateThread与_beginthreadex本质区别》中讲到一个多线程报数功能。为了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是否运行出错。这也非常类似于统计一个网站每天有多少用户登录,每个用户登录用一个线程模拟,线程运行时会将一个表示计数的变量递增。程序在最后输出计数的值表示有今天多少个用户登录,如果这个值不等于我们启动的线程个数,那显然说明这个

2015-07-09 13:25:14 301

转载 多线程第五篇 经典线程同步之信号量Semaphore

1、首先来看看如何使用信号量    信号量Semaphore常用有三个函数,使用很方便。下面是这几个函数的原型和使用说明。第一个 CreateSemaphore函数功能:创建信号量函数原型:HANDLE CreateSemaphore(  LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,  LONG l

2015-07-09 11:44:43 413

转载 多线程第八篇 生产者消费者经典问题

继经典线程同步问题之后,我们来看看生产者消费者问题及读者写者问题。生产者消费者问题是一个著名的线程同步问题,该问题描述如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个具有多个缓冲区的缓冲池,生产者将它生产的产品放入一个缓冲区中,消费者可以从缓冲区中取走产品进行消费,显然生产者和消费者之间必须保持同步,即不允许消费者到一个空的缓冲区

2015-07-09 11:25:22 439

转载 多线程第七篇 经典线程同步与互斥总结

前面《多线程二  多线程中的隐蔽问题揭秘》提出了一个经典的多线程同步互斥问题,这个问题包括了主线程与子线程的同步,子线程间的互斥,是一道非常经典的多线程同步互斥问题范例,后面分别用了四篇《多线程三 经典线程同步之关键段CS》《多线程四 经典线程同步之互斥量Mutex》《多线程五 经典线程同步之事件Event》《多线程六 经典线程同步之信号量Semaphore》

2015-07-09 11:03:35 355

转载 多线程第六篇 经典线程同步之事件Event

1、首先介绍下如何使用事件。    事件Event实际上是个内核对象,它的使用非常方便。下面列出一些常用的函数。1)第一个 CreateEvent函数功能:创建事件函数原型:HANDLE CreateEvent(LPSECURITY_ATTRIBUTESlpEventAttributes,BOOLbManualReset,BOOLbI

2015-07-09 10:38:28 318

转载 多线程第一篇 CreateThread与_beginthreadex的本质区别

1. 具体说来,CreateThread这个 函数是windows提供给用户的 API函数,是SDK的标准形式,在使用的过程中要考虑到进程的同步与互斥的关系,进程间的同步互斥等一系列会导致操作系统死锁的因素,用起来比较繁琐一些,初学的人在用到的时候可能会产生不可预料的错误,建议多使用AfxBeginThread,是编译器对原来的CreateThread函数的封装,用与MFC

2015-07-07 15:10:07 379

原创 使用WinDug查内存泄露

在C++的开发中经常会出现内存泄露,尤其服务开发,一个很小的内存泄露就可以导致很严重的问题。最终我们的程序会因以下两个错误崩溃。1. The application has no enough resource to display。2. The application crash with a log like "memory allocation failed"。      Windu

2015-07-06 11:30:47 1083

转载 使用windbg抓取崩溃文件和分析的过程

在软件编程中,崩溃的场景比较常见的。且说微软技术再牛X,也是会出现崩溃的场景。网上有一段Win98当着比尔盖茨蓝屏的视频非常有意思。(转载于breaksoftware的csdn博客)        我们身边的很多软件都引入了dump生成和收集机制。但是一般情况下,它们都是生成minidump。因为minidump文件相对来说很小,方面我们收集上来进行分析。但是Minidump保存了很少的信息,

2015-04-23 14:14:13 405

转载 使用MySQL connector/C++链接MySQL数据库

首先去MySQL官网下载MySQL connector/C++http://dev.mysql.com/downloads/connector/cpp/1.0.html下载第二个包,windows32位非安装版(个人觉得这个包干净)。目前的版本是Connector/C++ 1.0.5。Windows (x86, 32-bit), ZIP Archive (mysql-conne

2015-04-17 14:00:40 446

转载 C++反汇编代码分析--函数调用

代码如下:    #include "stdlib.h"    int sum(int a,int b,int m,int n)    {         return a+b;    }    void main()    {         int result = sum(1,2,3,4);         system("pause");

2015-04-14 09:23:46 344

转载 栈帧

首先应该明白,栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈帧的顶部(地址地)。下图为典型的存取器安排,观察栈在其中的位置 入栈操作:push eax; 等价于 esp=esp-4,eax->[esp];如下图出栈操作:pop e

2015-03-25 09:56:55 307

转载 从海康7816的ps流里获取数据h264数据

海康7816使用ps流来封装h.264数据,这里使用的解码器无法识别ps流,因此需要将h264数据从ps流里提取出来对于ps流的规定可以参考13818-1文档 这里从7816里获取到一些数据取样00 00 01 BA 44 73 26 B8 34 01 00 00 03 FE FF FF 00 00 00 0100 00 01 BC00 5A E0 FF 00 24

2015-01-20 13:32:47 997 1

转载 C++对象模型

C++对象模型何为C++对象模型?C++对象模型可以概括为以下2部分:1.        语言中直接支持面向对象程序设计的部分2.        对于各种支持的底层实现机制语言中直接支持面向对象程序设计的部分,如构造函数、析构函数、虚函数、继承(单继承、多继承、虚继承)、多态等等,这也是组里其他同学之前分享过的内容。第一部分这里我简单过一下,重点在底层实现机制。在c

2015-01-19 16:07:35 336

转载 C++ 虚函数表解析

C++ 虚函数表解析 陈皓http://blog.csdn.net/haoel  前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,R

2015-01-13 15:35:16 255

转载 h264 图像、帧、片、NALU

图像、帧、片、NALU 是学习 H.264的人常常感到困惑的一些概念,我在这里对自己的理解做一些阐述,欢迎大家讨论:H.264 是一次概念的革新,它打破常规,完全没有 I 帧、P帧、B 帧的概念,也没有 IDR帧的概念。对于 H.264中出现的一些概念从大到小排序依次是:序列、图像、片组、片、NALU、宏块、亚宏块、块、像素。这里有几点值得说明:(1)、在 H.264协议中图像是个集合

2014-11-06 13:49:53 342

转载 C++设计模式-Mediator中介者模式

Mediator中介者模式作用:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。UML如下:Colleage抽象同事类,而ConcreteColleage是具体同时类,每个具体同事只知道自己的行为,而不了解其他同事类的情况,但它们却都认识中介者对象,Mediator是抽象中介者,定义了同事对象

2014-08-02 15:13:18 265

转载 C++设计模式-Memento备忘录模式

Memento模式作用:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。UML图:Originator:负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。Originator可根据需要决定Memento存储Originator的哪些内部状态。Memen

2014-08-02 15:12:30 376

转载 C++设计模式-Observer观察者模式

Observer观察者模式作用:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己UML图:Subject类,可翻译为主题或抽象通知者,一般用一个抽象类或者一个借口实现。它把所有对观察者对象的引用保存在一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个借口,可以

2014-08-02 15:11:37 280

转载 C++设计模式-State状态模式

State状态模式作用:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。UML图如下:State类,抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为。ConcreteState类,具体状态,每一个子类实现一个与Context的一个状态相关的行为。Context类,维护一个ConcreteState子类的实例,这个实例

2014-08-02 15:10:02 389

转载 C++设计模式-Proxy代理模式

Proxy代理模式作用:为其他对象提供一种代理以控制对这个对象的访问。代理的种类:如果按照使用目的来划分,代理有以下几种:远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代表对象。这个不同的地址空间可以是在本机器中,也可是在另一台机器中。远程代理又叫做大使(Ambassador)。 也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对

2014-08-02 15:07:14 299

转载 C++设计模式-Strategy策略模式

Strategy策略模式作用:定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。UML图:Strategy模式将逻辑(算法)封装到一个类(Context)里面,通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口的实现委托给组合对象实现将算法的逻辑抽象接口(DoAction)封装到一个类中(

2014-08-02 15:06:53 280

转载 C++设计模式-TemplateMethod模板方法模式

Template模板方法模式作用:定义一个操作中的算法的骨架。而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。其关键是将通用算法(逻辑)封装在抽象基类中,并将不同的算法细节放到子类中实现。UML图如下:AbstractClass是抽象类,其实也就是一个抽象模板,定义并实现了一个模板方法。这个模板方法一般是一个具体

2014-08-02 15:05:59 274

转载 C++设计模式-Facade模式

Facade模式作用:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。动机  将一个系统划分成为若干个子系统有利于降低系统的复杂性。一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小。达到该目标的途径之一是就是引入一个外观(Facade)对象,它为子系统中较一般的设施提供了一个单一而简单的界面。

2014-08-02 15:05:08 339

转载 C++设计模式-Flyweight享元模式

Flyweight享元模式作用:运用共享技术有效地支持大量细粒度的对象。内部状态intrinsic和外部状态extrinsic:1)Flyweight模式中,最重要的是将对象分解成intrinsic和extrinsic两部分。2)内部状态:在享元对象内部并且不会随环境改变而改变的共享部分,可以称为是享元对象的内部状态3)外部状态:而随环境改变而改变的,取决于

2014-08-02 15:04:10 280

转载 C++设计模式-Decorator装饰模式

Decorator装饰模式作用:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。UML图如下:Component是定义一个对象接口,可以给这些对象动态地添加职责。ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。Decorator,装饰抽象类,继承了Component,从外类来扩展Comp

2014-08-02 15:00:22 265

转载 C++设计模式-Bridge桥接模式

作用:将抽象部份与它的实现部份分离,使它们都可以独立地变化。将抽象(Abstraction)与实现(Implementation)分离,使得二者可以独立地变化。桥接模式号称设计模式中最难理解的模式之一,关键就是这个抽象和实现的分离非常让人奇怪,大部分人刚看到这个定义的时候都会认为实现就是继承自抽象,那怎么可能将他们分离呢。《大话设计模式》中就Bridge模式的解释:

2014-08-02 15:00:13 287

转载 C++设计模式-Prototype原型模式

作用:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。Prototype模式提供了一个通过已存在对象进行新对象创建的接口(Clone), Clone()实现和具体的语言相关,在C++中通过拷贝构造函数实现。UML图如下:代码如下:Prototype.h 1 #ifndef _PROTOTYPE_H_ 2 #define

2014-08-02 14:58:49 450

转载 C++设计模式-Adapter适配器模式

Adapter适配器模式作用:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。分为类适配器模式和对象适配器模式。系统的数据和行为都正确,但接口不符时,我们应该考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。

2014-08-02 14:58:43 238

转载 C++设计模式-Singleton

Singleton单例模式Singleton 是对全局变量的取代策略作用:保证一个类只能有一个实例,并提供一个全局唯一的访问点。仅有一个实例:通过类的静态成员变量来体现。提供访问它的全局访问点:访问静态成员变量的静态成员函数来体现。《设计模式》一书中给出了一种很不错的实现,定义一个单例类,使用类的私有静态指针变量指向类的唯一实例,并用一个公有的静态方法获取该实例。

2014-08-02 14:56:11 255

转载 C++设计模式-Builder建造者模式

作用:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。Builder模式和AbstractFactory模式在功能上很相似,因为都是用来创建大的复杂的对象,它们的区别是:Builder模式强调的是一步步创建对象,并通过相同的创建过程可以获得不同的结果对象,一般来说Builder模式中对象不是直接返回的。而在AbstractFactory模式中对象是直接返回的,

2014-08-02 14:55:24 247

转载 C++设计模式-AbstractFactory抽象工厂模式

AbstractFactory要创建一组相关或者相互依赖的对象作用:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。UML结构图:抽象基类:1)AbstractProductA、AbstractProductB:分别代表两种不同类型的产品,由具体的产品派生类对其实现2)AbstractFactory:抽象工厂类,提供创建两

2014-08-02 14:54:17 303

转载 C++设计模式-Factory工厂模式

Factory1、定义创建对象的接口,封装对象的创建2、将实际创建工作延迟到子类中,例如,类A中药使用类B,B是抽象父类,但是在类A中不知道具体要实例化哪一个B的子类,但是在类A的子类D中是可以知道的。在A中无法使用 new B***()方法3、将创建工作延迟到子类中后,核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂,只提供工厂子类必须实现的接口,这样的好处是可以不用修改已有

2014-08-02 14:50:06 337

转载 C++设计模式 对象结构模式-----组合模式(COMPOSITE)

Composite组合模式作用:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。UML图如下:在Component中声明所有用来管理子对象的方法,其中包括Add、Remove等,这样实现Component接口的所有子类都具备了Add和Remove。这样做的好处就是叶节点和枝节点对于外界没有区别,它们

2014-08-02 14:36:06 335

转载 利用DirectSound实现录音

在开始工作之前,要先介绍DirectSound录音用到的三个非常重要的对象,IDirectSoundCapture8 ,设备对象,根据你录音的设备创建的设备对象,利用该对象可以获取设备的属性。IDirectSoundCaptureBuffer8,缓冲区对象,该对象由设备对象创建,主要用来操作音频数据IDirectSoundNotify8 ,事件通知对象,该对象用来通知应用程序从缓冲区中

2014-05-15 17:59:56 641

空空如也

空空如也

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

TA关注的人

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