C++
文章平均质量分 57
hong201
飘过Web App,来到Game Dev,关注Android。目前专注于PC Game,望志同道合的朋友一起交流,共同进步!——Simple is better!
展开
-
指针函数与函数指针
int cmax(int x, int y){ return x > y ? x : y ;}// 指针函数 int* cmin(int x, int y){ static int *r; if (x > y) { r = &y; } else { r = &原创 2008-10-06 21:29:00 · 509 阅读 · 0 评论 -
初始化零:ZeroMemory、memset、{0x00}的区别
C++中,结构,数组,类对象等初始化,一般情况下是需要初始化为零,初始化为零又有好几种情况,下面结合自己编程经验,浅谈一下。 1.memset函数是C库提供的,把某个对象初始化为某值,如:memset(this, 0, sizeof(this);2.ZeroMemory函数是Windows平台提供的宏定义,但内部是调用memset,初始化为0;3.{0x00}是 将成品变量初始化为原创 2009-11-19 23:24:00 · 3399 阅读 · 1 评论 -
小菜破坏了小海藻
话说时下电视剧《X居》正在热播中。一贯两耳不闻窗外事,一心一意为人民服务,废寝忘食写代码的小菜也被这一夜之间传遍神州大地的《X居》感染了,代码写了一半就跑去看了…… #¥&@#,电视剧看完了,小菜继续写代码了struct STTV{ char szName[8]; unsigned int unTotal; unsigned int unUrlLen; char原创 2009-12-15 21:23:00 · 713 阅读 · 0 评论 -
终于把DB数据管理器写完了
DB数据管理器支持多个大请求并发,大请求拆分成小请求向DBEngine发送,DBEngine异步回应,且对DBEngine返回大请求的每个小请求返回的时候,DB数据管理器需要做缓存,待一个大请求的所有小请求全部返回之后,DB数据管理器将合并成大请求的结果,返回给调用方。可爱可恨的DB数据管理器,终于写完了……原创 2009-12-22 21:34:00 · 702 阅读 · 0 评论 -
内存池(MemPool)
话说内存池貌似是一个比较深刻的话题,每当想去尝试一下,然而深感自己积累不足;今天终于有积累,有时间会会内存池了。之前看过STL中Alloc,即空间配置器的设计思想以及实现;后续看过ACE的Block,都是关于内存池的不同见解。 今天有空实现了一个内存池,按照STL的空间空配置器的思想实现,就是用纵横链表管理内存块。横向的链表管理不同大小的内存块,纵向链表管理相同大小的内存块,为了不浪费内存原创 2009-12-27 14:54:00 · 1330 阅读 · 1 评论 -
哪些需要重构?
近期再度《重构》,有感而记: Bad smells in Code(不好的代码):1.Duplicated Code(重复的代码),同一份代码出现在一次以上;2.Long Method(过长代码),一个函数太长,功能包罗万象;3.Large Class(过大类),一个类的功能太多,导致有很多的实例变量;4.Long ParameterList(过长参数列遇到多种变化,都是在某个类中做出变化原创 2010-03-21 14:15:00 · 4567 阅读 · 0 评论 -
小用WinDbg之一
<br />看《深入解析Windows操作系统》的时候,作者讲到如何使用WinDbg调试系统,所以也来试试WinDbg。<br /> <br />先来看看下载及配置WinDbg吧:<br />1.到微软官方网站下载相应版本的WinDbg,WinXp+SP2版本的下载地址是:<br />http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.11.1.404.msi<br /> <br />2.在使用WinDbg调试之前,必须保证系统的符号原创 2010-06-24 22:13:00 · 4746 阅读 · 0 评论 -
Which is fast : ++i or i++?
我们大家都知道,++i,是前置加加,即:在执行前先++,i++是后置加加,是在执行后++。例如:int nLeft = 1;int nRight = ++nLeft; 此时,nLeft=2, nRight=2; int nLeft = 1;int nRight = nLeft++; 此时,nLeft=2, nRight=1; 那么++原创 2010-05-14 21:53:00 · 5178 阅读 · 0 评论 -
网上流传的一面试题目
先来看一副图吧: 题目的意思给一个初始值6,打印如上图形,先仔细分析分析看:1.图形是6行6列;2.从第一行第一列的位置开始,转圈,数值依次增加;3.第一列第一行的初始值是1; 进一步分析:1:起始值:x=0,y=0,direction=right,startValue=1;2:循环条件:若能沿着上一次的方向,则继续,否则,从right到bottom,从bo原创 2010-05-17 23:46:00 · 4717 阅读 · 0 评论 -
快速搭建SVN服务器
以往下载 Setup-Subversion , 下载Apache安装,svn服务配置,权限配置,麻烦之极了,其实在window下没有必要这么麻烦。 捷径步骤:1. 直接下载VisualSVN Server即可了,下载它的免费版本已经够用了,自带了svn server和 ApacheHTTP;2. 安装过程可以选择http or https协议, 可以选择端口, 代码仓库是必须能够选原创 2012-09-02 14:59:07 · 4475 阅读 · 0 评论 -
WinSock温习一
sock编程,之前接触过一段时间,但是没空写写。现在先从最基本的select模型开始吧,简单的echoserver示例。 服务端,sock创建的步骤,顺序不能乱1.WSAStartup // 加载winsock.dll2.sock // 创建sock3.bind // 绑定sock4.listen原创 2009-10-26 23:23:00 · 763 阅读 · 0 评论 -
深度探索C++对象模型学习笔记——Function语意学
C++支持三种类型的成员函数:静态,非静态、和虚函数 虚函数细节:每个class有一个virtual table,内含该class之中有作用的virtual function地址,然后每个object有一个vptr,指向virtual table的所在。对于虚函数ptr->z();的调用,需要知道如下两点:1.ptr所指对象的真实类型,可使选择正确的z()实体;2.z()实体位置原创 2009-10-07 19:20:00 · 575 阅读 · 0 评论 -
深度探索C++对象模型学习笔记——构造语意学
c++在布局以及存取时间上主要的额外负担是由virtual引起,包括:1. virtual function机制(运行期绑定runtime binding)2. virtual base class机制(多次出现在继承体系中的base class,单一却被共享的实体)3. derived class和base class的转换(dynamic_case转换)c++中:有两种数据成员:静态和非静原创 2009-09-20 14:54:00 · 614 阅读 · 0 评论 -
指针常量与常量指针
void setLocale(){ setlocale(LC_ALL,"chs");}void test(){ const int n = 10; int n1 = 11, n3=13; const int n2=12; const int *p = &n; // 指针常量,指针所指对象的值不能改变 /原创 2008-10-06 21:34:00 · 489 阅读 · 0 评论 -
牛人飞信协议分析
看到别人在分析飞信协议,牛人一个啊,http://hi.baidu.com/nathan2007/blog如果要是被主导飞信的人看到了,估计要晕乎哉。。。。。。 另外,网页版本的飞信发送方式:http://sms.api.bz/linux下发送方法:curl "http://sms.api.bz/fetion.php?username=您的手机号码&password=登陆飞信的密码原创 2009-04-19 11:40:00 · 3023 阅读 · 0 评论 -
容器存放string指针
假如set中存放string指针,想当然可能会如此写:std::set setPtr;typedef std::set::iterator it_setptr;setPtr.insert(new std::string("hong"));setPtr.insert(new std::string("STL"));setPtr.insert(new std::string("原创 2009-08-02 20:03:00 · 1315 阅读 · 0 评论 -
内存泄漏检测
看到这篇文章,觉得蛮不错,http://blog.vckbase.com/bruceteen/archive/2004/10/28/1130.aspx。 检测内存泄漏示例:#include "debugNew.h"using namespace std;int main(int argc, char* argv[]){ char* szP = new char[原创 2009-08-01 14:13:00 · 648 阅读 · 0 评论 -
vector存放pair对象
一般关联对象都会放在map或者hash_map中,这样做是为了查询速度快,SGISTL中map是红黑树结构,即每个节点要存放3个指针,分别是父节点,左子节点,右子节点,如果存入map的对象比较小且数量不多时,反而用有序vector会快一些。 例子demo:typedef std::pair Data;class DataCompare{public: bool op原创 2009-08-08 14:10:00 · 4096 阅读 · 1 评论 -
dll调用的来龙去脉
关于dll的介绍可以在这里看到http://support.microsoft.com/kb/815065/zh-cn,这个算是官方解释了。 1.dll生成dll的入口如下,就像应用程序的main函数一样,其中DLL_PROCESS_ATTACH是dll被调用的执行处理,DLL_PROCESS_DETACH是被卸载的时候的调用。 BOOL APIENTRY DllMain( HA原创 2009-08-30 17:04:00 · 955 阅读 · 0 评论 -
漫谈游戏中的交易逻辑
现在大部分游戏的交易,只允许两人交易,逻辑如下(假定A和B交易):拒绝交易情况:A(请求和B交易)------>服务器(转发A的请求至B)------->B(是否接受A的请求交易)B(拒绝A的请求)------>服务器(转发B的回答至A)-------->A同意交易情况:1) A(请求和B交易)------>服务器(转发A的请求至B)------->B(是否接受A的请求原创 2009-06-27 11:39:00 · 1238 阅读 · 1 评论 -
SGI STL安装
SGI STL安装STL的版本有很多个,其中的SGI版本的使用非常广,linux下的GCC用的就是这个。现在有个sport组织致力于把SGI版本的移植到其他平台上。下面以安装到vc6为例:侯捷的《STL源码剖析》那本书的附录里有孟岩下的一片STLPort一直经验,按照那篇文档参考一步一步操作:1) 先到http://www.stlport.org/下载需要的版本,解压STLPo原创 2009-07-05 14:06:00 · 3803 阅读 · 1 评论 -
深度探索C++对象模型学习笔记——Data语意学
例子:class X{};class Y: public virtual X {};class Z: public virtual X {};class A: public Y, public Z {}; 对象大小由下述原因决定1.语言本身所造成的额外负担如:支持virtual base classes时,derived class中,额外负担反映在某种形式的指针身上,它或者指向vir原创 2009-09-20 19:23:00 · 656 阅读 · 0 评论 -
漫谈sscanf高级特性
格式化输出API, printf, sprintf, vsprintf等等早已被大家知悉,使用规则也是了如指掌:比如 %d, %s, %p, %-02d等等; sscanf 相当使用的略少,它的用法除了常用的 %d, %s, %c等之后还有 “^”,“[”,“]”,“*”等等;1. “^” 和正则表达式中的 ^作用一致, 相当于非;2. “[”,“]”成对使用,和正则表达式中的原创 2012-10-09 22:49:33 · 4860 阅读 · 0 评论