C++
mymtm
这个作者很懒,什么都没留下…
展开
-
容器不是万能的!
之前一直被一句话误导了 “vector 和string优先于动态分配的数组。”,误以为vector比内置数组要好,最近遇到一个bug才认识到可能vector用起来确实方便些,但从效率和安全性来讲vector却不一定好。例子:在启动一个状态Status时,会遍历其中的效果Effect,逐个启动。当某个状态的某个效果是一个伤害,导致master死亡,部件被释放,该Effect启动之后返回到Status,继续遍历Effect时引起服务器崩溃,有时还报pure virtual function call。出错代码:原创 2010-07-01 16:52:00 · 528 阅读 · 0 评论 -
有关结构体对齐
<br />对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐.其他平台可能没有这种情况,但是最常见的是如果不按照适合其平台要求对数据存放进行对齐,会在存取效率上带来损失。比如有些平台每次读都是从偶地址开始,如果一个int型(假设为32位系统)如果存放在偶地址开始的地方,那么一个读周期就可以读出这32bit,而如果存放在奇地址开原创 2010-07-23 12:16:00 · 394 阅读 · 0 评论 -
关于析构
struct IBase{ virtual Release() = NULL;};class CDerive:public IBase{public: ~CDerive() { printf("CDerive destraction/n"); }; virtual Release() { delete this; };};class CDerive2:public CDerive{public: ~CDerive2()原创 2010-06-12 18:22:00 · 328 阅读 · 0 评论 -
遍历STL容器时迭代器的使用注意
<br />如果是遍历查询,可先计算end迭代器,减少每次计算的数量,例如:<br />typedef vector<int> VEC;<br />VEC oneVec;<br />VEC::iterator itEnd = oneVec.end();<br />for(VEC::iterator it = oneVec.begin();it!=itEnd;++it)<br />{<br /> ...<br />}<br /> <br />但如果在遍历中会删除或增加容器中的元素,这样就会出问题。<br原创 2010-11-11 16:43:00 · 552 阅读 · 0 评论