自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 资源 (2)
  • 收藏
  • 关注

转载 Boost::Utility库 之enable_if

enable_if 头文件: "boost/utility/enable_if.hpp"有时候,我们希望控制某个函数或类模板的特化是否可以加入到重载决议时使用的重载或特化的集合中。例如,考虑一个重载的函数,它有一个版本是带一个int参数的普通函数,另一个版本是一个函数模板,它要求参数类型T 具有一个名为type的嵌套类型。它们看起来可能象这样:void some_func(int

2013-10-18 11:03:26 2565

转载 C++中operator的主要用法

1.  operator 用于类型转换函数:类型转换函数的特征:1)  型转换函数定义在源类中;2)  须由 operator 修饰,函数名称是目标类型名或目标类名;3)  函数没有参数,没有返回值,但是有return语句,在return语句中返回目标类型数据或调用目标类的构造函数。类型转换函数主要有两类:1)  对象向基本数据类型转换:对象向不

2012-06-12 22:06:40 13344

转载 c++字节对齐

规定各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该“变量的类型”或者指定对齐系数所占用的字节数的倍数,当变量类型和指定系数不同时,取小的。整个结构大小按照以上对齐计算,但必须是最大类型大小或者指定对齐系数的整数倍,也就是最后一个成员变量要圆整,当最大类型大小和指定对齐系数不一致的情况,取小的。当成员变量本身是结构体的时候,不能用整个struct大小计算起始地址,而应该用结构体中最大类

2012-05-27 10:50:24 860

原创 读写锁

多个线程产生race condition,根据业务逻辑,分为共享资源的读和写,多个线程的读不会对数据造成破坏。如果不区分读和写,每次遇到race condition便锁住不允许其他线程访问,造成效率低下。根据以上逻辑,可以用信号量来实现多个线程的共享读,互斥写。//读写递归锁class RWRecLock{public: typedef AutoRLockT AutoRLock

2012-05-07 22:18:28 613

原创 CRITICAL_SECTION同步易出错的地方

众所周知通过CRITICAL_SECTION可以对多个线程同步,然而加锁和解锁的次数不匹配将导致死锁:class CLock{public: CLock() { InitializeCriticalSection(&m_cs); } ~CLock() { DeleteCriticalSection(&m_cs); } void Lock() { Ente

2012-05-07 19:58:03 1436 1

转载 C++转型操作符:const_cast、dynamic_cast、static_cast、reinterpret_cast

C++转型操作符 C++通过引进四个新的类型转换操作符克服了C风格类型转换的缺点,这四个操作符是:const_cast( expression ) dynamic_cast( expression ) static_cast( expression ) reinterpret_cast( expression ) 在大多数情况下,对于这些操作符你只需要知道原来你习惯

2012-05-01 23:13:52 592

转载 scoped_ptr解析

scoped_ptr解析《超越C++标准库-Boost库导论》头文件: "boost/scoped_ptr.hpp"boost::scoped_ptr 用于确保动态分配的对象能够被正确地删除。scoped_ptr有着与std::auto_ptr类似的特性,而最大的区别在于它不能转让所有权,然而auto_ptr却可以。事实上,scoped_ptr永远不能被复制或被赋值!scoped_

2012-05-01 22:58:23 594

转载 当析构函数遇到多线程 ── C++ 中线程安全的对象回调

转自:http://www.cnblogs.com/Solstice/archive/2010/02/10/dtor_meets_threads.html#_Toc8041摘要 编写线程安全的类不是难事,用同步原语保护内部状态即可。但是对象的生与死不能由对象自身拥有的互斥器来保护。如何保证即将析构对象 x 的时候,不会有另一个线程正在调用 x 的成员函数?或者说,如何保证在执行 x 的

2012-05-01 13:03:17 2070

转载 shared_ptr解析

shared_ptr解析《超越C++标准库-Boost库导论》头文件: "boost/shared_ptr.hpp"几乎所有稍微复杂点的程序都需要某种形式的引用计数智能指针。这些智能指针让我们不再需要为了管理被两个或多个对象共享的对象的生存期而编写复杂的逻辑。当引用计数降为零,没有对象再需要这个共享的对象时,这个对象就自动被销毁了。引用计数智能指针可以分为侵入式(intrusive)和

2012-05-01 12:54:40 4147

原创 避免引起野指针

1、避免不同的对象拥有同一份堆上分配的指针;          不同对象永远堆上的指针,当某一个对象去把该指针释放了,并把该指针置空(NULL),之后拥有该指针的其他对象再访问指针,判断不为空,但因为已经释放(原对象中虽然已经置空,但本对象却不为空),对这个指针指向的内存进行存取操作,引发访问违规,程序崩掉。或者说某个线程已经进入了对象的成员函数,而另外一个线程同时去释放该对象指针,也讲引起c

2012-04-28 10:53:03 3957 1

转载 进程的虚拟地址空间

32位机器,每个程序有4G的虚拟地址空间。大致分为4块,从低地址到高地址依次是:NULL区,用户区,隔离区,核心区。用户私有的数据都在用户区(当然这个区里又可以细分,其中也包括一部分可以共享的内容),系统内核等东西都在核心区。总体来说,A进程的虚拟地址空间中的内容和B进程相比,只有各自的用户区不一致。通常用户区中,进程又会将exe文件(由头数据和段数据组成)中定义的代码段、堆栈段、数据段等各个段映

2012-03-31 01:02:58 1768

转载 浅议windows内存管理

这里仅是对windows内存的简单介绍,适合编写windows应用程序的人阅读,主要参考《windows核心编程》及《深入解析windows操作系统》第四版。对windows内存管理的内部机制,将在以后加以介绍。首先,用户用到的内存都是虚拟内存,windows内存管理器负责将虚拟地址转译成物理内存。对于32位机器,虚拟地址空间就是4G大小,用4个byte就可以覆盖,因此,32位机的指针大小就是

2012-03-31 00:52:48 838

转载 windows笔记-虚拟内存

windows笔记-虚拟内存 Windows提供了3种进行内存管理的方法: ? 虚拟内存,最适合用来管理大型对象或结构数组。 ? 内存映射文件,最适合用来管理大型数据流(通常来自文件)以及在单个计算机上运行的多个进程之间共享数据。 ? 内存堆栈,最适合用来管理大量的小对象。  虚拟内存在地址空间中保留一个区域  通过调用VirtualAlloc函数,可以

2012-03-31 00:39:08 406

转载 Windows下动态内存分配方式

这里的"动态内存"包含以下两个方面的内容:  1.内存。这里的"内存"指的是进程的虚拟内存空间。在Win32环境下,每一个进程拥有独立的,大小为4G(0x0000 0000 ~ 0xFFFF FFFF)的虚拟内存空间。  2.动态。这里的"动态"指的是进程虚拟内存空间中的动态内存区域。在一个进程的虚拟内存空间中,只有动态内存可以在运行是被应用程序自由的分配/使用/释放。 在Win32环

2012-03-31 00:27:16 611

转载 Dll分配的内存块,应用释放的问题

写了个程序,在DLL中用malloc分配了一块内存,但是在exe程序中释放,结果程序crash,原因就是:其原因可能是堆被损坏,这也说明 TestMySticker.exe 中或它所加载的任何 DLL 中有 bug。想了半天以为是自己的写法有问题,后终于在google上找到了原因,汗。。。以下文字引用自 http://hi.baidu.com/huhe/blog/item/0b42

2012-03-31 00:25:08 565

原创 用SAXXMLReader将XML文件保存为缩进格式,方便阅读

MSXML3.0以上才提供对SAXXMLReader,直接上代码:void SaveToXmlFile( MSXML2::IXMLDOMDocumentPtr docPtr,const wchar_t* XmlFileName ){ HRESULT hr = S_OK; MSXML2::IMXWriterPtr pWriter(__uuidof(MSXML2::MXXMLWriter

2011-12-13 10:12:27 1819

转载 《unix环境高级编程》源代码编译找不到apue.h等错误的解决办法

转自:http://blog.chinaunix.net/u1/52350/showart_426726.html最近学习Linux编程,收获真的很多。以前看都是别人或man告诉你某个命令怎么使用,但现在我才领悟到,是程序的源代码决定了全部。 linux要编程,首先需要安装gcc与其它编程工具与库文件。最简单的方法是进入图形界面的添加删除程序,选上开发工具就可以了。  1.

2011-11-22 11:33:05 2714

转载 http://www.linuxdiyf.com/bbs/thread-90655-1-8.html

相信很多跟我一样想要学习unix编程的朋友在兴冲冲拿到《unix环境高级编程》后,准备拿源码练练手时,执行第一个myls就出现一大堆的错误,这未免时个不小的打击。今天把解决方法写下来,第一自己有个记录,第二也帮助那些被同样问题困扰的朋友尽快的进入linux美丽的世界。(只限linux系统)首先需要make一次源代码编辑源码解压生成的apue.2e文件夹下的Make.defines.

2011-11-22 11:30:28 3803

转载 vim的自动縮进

syntax onexport TERM=xterm-colorset tabstop=4set softtabstop=4set shiftwidth=4set autoindentset cindentset cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1sset nuset ts=4set expand

2011-11-21 10:16:33 852

转载 学习笔记:shared_ptr陷阱

条款1:不要把一个原生指针给多个shared_ptr管理int* ptr = new int;shared_ptr p1(ptr);shared_ptr p2(ptr); //logic errorptr对象被删除了2次这种问题比喻成“二龙治水”,在原生指针中也同样可能发生。条款2:不要把this指针给shared_ptrclass Test{public:

2011-11-20 18:22:43 6898

转载 使用_CrtSetDbgFlag检测内存泄露

介绍:动态分配、回收内存是C/C++编程语言一个最强的特点,但是中国哲学家孙(Sun Tzu,我不知道是谁?那位知道?)指出,最强的同时也是最弱的。这句话对C/C++应用来说非常正确,在内存处理出错的地方通常就是BUGS产生的地方。一个最敏感和难检测的BUG就是内存泄漏-没有把前边分配的内存成功释放,一个小的内存泄漏可能不需要太注意,但是程序泄漏大块内存,或者渐增式的泄漏内存可能引起的现象是:

2011-11-20 16:23:05 1349

转载 weak_ptr解决shared_ptr环状引用所引起的内存泄漏

循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象。一个简单的例子如下: #include#include #include #include class parent;class children;typedef boost::shared_ptr parent_ptr;typedef boost::sha

2011-11-20 15:13:44 10621 1

转载 (转)C++ stringstream介绍,使用方法与例子

C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件。  istringstream类用于执行C++风格的串流的输入操作。 ostringstream类用于执行C风格的串流的输出操作。 strstream类同时可以支持C风格的串流的输入输出操作。   istringstre

2011-11-19 16:14:57 809

转载 cin标准输入流错误清理

cin.sync()函数这个是用来清空cin缓冲区里面未读取的信息...例子: #include using namespace std;int main () { char first, second; cout << "Please, enter a word: "; first=cin.get(); cin.sync();

2011-11-19 15:42:41 3585

转载 把SEH类型的系统异常转化为C++类型的异常

做一件事情之前,我们最好要搞清为什么!“十万个为什么” 可曾造就了多少顶级奇才!呵呵! WHY? ? WHY ? WHY ?这对任何一个人来说,都绝对是个好习惯,阿愚同学就一直把这个当“宝贝”。那么,究竟 为什么要 把 SEH 类型的系统异常转化为 C++ 类型的异常?朋友们,大家都想想,整理整理自己的意见和想法。这里,阿愚给出它个人的理解,如下:  • 首先是由于我们在编程时,仍然最好遵

2011-11-17 23:20:58 686

原创 SEH转化为C++异常<三>

//==============================================================================//// 项目名 :// 文件名 :XDBExceptionReport.cpp// 作 者 :// 用 途 :异常报告输出实现类。// //=================================

2011-11-17 22:58:42 1374

原创 SEH转化为C++异常<二>

//==============================================================================//// 项目名 :// 文件名 :XDBExceptionReport.h// 作 者 :// 用 途 :异常报告实现类。// //=====================================

2011-11-17 22:56:53 826

原创 SEH转化为C++异常

//==============================================================================//// 项目名 :数据库// 文件名 :XDBWin32Exception.h// 作 者 :// 用 途 :Win32结构化异常封装类。// //===============================

2011-11-17 22:49:33 771

转载 补一点COM的知识,有关_com_ptr_t

<br />TLB文件是一个说明文件,通过TLB文件,用户可以得知你的DLL文件中的COM接口 <br />以及常量等的信息,这样一来用户才知道你的DLL中有什么接口与常量等,用户才 <br />能用你的接口,当然了,如果你的COM接口只想自己使用,你可以不做TLB文件告诉 <br />其他人这些信息了。<br /><br />在使用#import引入一个com组件的时候,会自动生成.tlh和.tli两个文件,这个两个文件是对com类的封装,tlh是标准头文件,里面为每个组件类定义了一个_com_ptr_t

2010-11-09 15:01:00 1208

转载 智能指针 _com_ptr_t的使用

<br />对于COM调用,大量的AddRef/Release调用无疑是例行公事和让人生厌。<br />_com_ptr_t 是vc运行库中提供的固有的封装COM接口的智能指针,相比CComPtr/CComQIPtr缺少移植性,<br />但是支持不是ATL实现部分的的异常和操作。<br />以下是DirectShow中播放一个文件的代码:<br />    IGraphBuilder *pGraph;<br />    IMediaControl *pMediaControl;<br />    IMed

2010-11-09 10:47:00 5122

转载 让程序随系统启动

 Windows启动时通常会有一大堆程序自动启动。不要以为管好了“开始→程序→启动”菜单就万事大吉,实际上,在Windows   XP/2K中,让Windows自动启动程序的办法很多,下文告诉你最重要的两个文件夹和八个注册键。             一、当前用户专有的启动文件夹             这是许多应用软件自动启动的常用位置,Windows自动启动放入该文件夹的所有快捷方式。用户启动

2009-11-25 09:26:00 1078

转载 堆和栈的区别

一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,

2009-09-19 10:18:00 337

转载 回调函数

简介  对于很多初学者来说,往往觉得回调函数很神秘,很想知道回调函数的工作原理。本文将要解释什么是回调函数、它们有什么好处、为什么要使用它们等等问题,在开始之前,假设你已经熟知了函数指针。   什么是回调函数?  简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。  为什么要使用回调函数

2009-09-19 10:03:00 560

WindowsAPI参考大全(中文)

MSDN固然是MS送给我们进行程序设计时候最好的帮助文档,可惜是英文的,有时候理解起来有些费事,不妨试试WindowsAPI参考大全(中文)。

2008-11-14

C C++语言经典算法

都是一些常用经典的算法描述,另外用C/C++语言描述,对于想学习编程技巧的人大有帮助!

2008-11-14

空空如也

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

TA关注的人

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