C++
文章平均质量分 64
tiger119
喜欢游泳,看书!
展开
-
重读<C++编程思想>
所谓重读,当然是因为以前读过。记得上次读它时,对C++理解基本是,一种加了class 的新的C语言。呵呵,当时读此书是想学语法:先是没明白前言作者都在讲啥,有啥用。然后开始跳到语法学习,却发现所举的例子看不懂,看不懂咋办,跳呗,很快跳着翻完了本书,然后一边怀疑着自已的智商,一边骂着译者,看钱能的那本C++去了。这次重读,感觉总算是看明白了一些东东,首先:书名叫C++编程思想,算是明白了,它压根就不原创 2004-11-24 01:13:00 · 1998 阅读 · 2 评论 -
C++中频繁引用的类如何避免不必要的重编译
在一个较大的程序中,总有一两个基础类差不多被其它大多数程序引用,而其它程序可能是几十或者上百个cpp,每当基础类要做一点的小的变动时,相关文件全部需要重新compile,如果改动的是public接口,那也罢了,但实际上很多时候,如果设计合理的话,改动的并不是public函数,而是需要加个private函数,或者private成员变量啥的。这就有些不值得了。以我为例,我现在的主要工作是维护公司的几个原创 2004-12-01 22:47:00 · 1948 阅读 · 5 评论 -
C++中基础类互相引用带来的问题
在一些大的工程中,可能会包含几十个基础类,免不了之间会互相引用(不满足继承关系,而是组合关系)。也就是需要互相声明。好了,这时候会带来一些混乱。如果处理得不好,会搞得一团糟,根据我的经验,简单谈谈自已的处理办法:编码时,我们一般会尽量避免include头文件,而是采用声明 class XXX。但有时候还是必须用Include头文件,那么,两者的划分在于什么呢?应该是很明确的,但书上好像都少有提原创 2005-01-13 23:04:00 · 2162 阅读 · 0 评论 -
CLASS_A A();中,A到底代表什么?
由于手误,在声明一个类的对象时:CLASS_A a();a.test();多加了"()",想想也没什么错误吧,觉得应该是调用默认构造,但编译时,居然有错。提示:test must have class/struct/union type仔细一考虑。原来是编译时发生了岐义,编译器并没有把A当成CLASS_A的一个实例,而是把它当成了一个参数为void的函数的声明了。就比如下述代码:(编译器是VC6.原创 2005-03-20 20:37:00 · 2733 阅读 · 0 评论 -
关于remove_if的错误用法
前天收到一个工作中的Bug,仔细查了一下,发现是自已对stl某算法理解的一个大错误。问题如下:一:背景: 我有一个vector容器,基本单元很特珠,需要在丢弃前释放其内部的一个指针成员。 (这可能是我的设计不合理造成的,有些怪) 如: vector m_lstUIAction; C_UIAction ::m_pA原创 2005-09-23 19:46:00 · 4352 阅读 · 0 评论 -
C++中利用析构机制正确保护现场
前段时间改错,碰到由于嵌套调用,重复调用一段有状态的代码,而因为没有正常保存现场,而导致外层调用的状态变更而出错。 此时,显然需要保护现场。 保存状态好办,但恢复状态的代码却有点小问题,到底放在哪里比较合适呢?因为程序有可能发生异常而抛出。也就是程序出口不确定。 此时可以采用类的析构来实现,让编译器来帮我们完成正确的恢复,达到代码清浙且无误。如下是简单示例:保护类:cla原创 2005-11-16 21:08:00 · 1604 阅读 · 0 评论 -
VC及C++的智能指针应用分析
前段时间,在查控件的内存泄露时,最终找出一个错误:在使用XMLDom(COM)时,由于重复使用某接口指针前未释放Dispatch指针(Release),而导致内存泄露,而此类错误(如同BSTR类型的泄漏),VC的调试器和Bondcheck均无能为力。解决办法,似乎只有细心一途。 但只要稍稍仔细看看,就可发现,实际上如果正确使用VC提供的智能指针,是可以避免此问题的。 另外,一直原创 2005-12-07 18:56:00 · 3697 阅读 · 0 评论 -
如何实现单例的进程内COM组件
最近要做一个状态保存器,希望用进程内COM实现,并且将状态保存在内存中,其实很简单,只需要在组件的应用程序中开辟全局内存区,即可达到效果,但突然想到,为什么进程内组件不能实现单例呢?于是,进行了若干尝试。 问题提出: 如何实现一个单例的COM进程内组件.(类似进程外组件的SingleUse) 仔细查看后发现:1:由于组件的实例创建由类厂实现,而类厂实际上是通过new的方原创 2006-03-16 21:44:00 · 3176 阅读 · 1 评论