今天自己写的棒视图模块与系统联调时出错,花了我一个多小时,终于找出出错原因:简单的说就是没有理解透map型的[]操作符的内在机理,代码表现为:
class A
{
BOOL RefrshBar(int nID);
map<int,structTstPntInfo*> m_map;//成员变量,structTstPntInfo是一个自定义结构
}
BOOL A::RefrshBar(int nID)
{
structTstPntInfo* stB = m_map[nID] ;
...
}
将调用我这个模块的人在刷新时指定了一个不存在的棒图nID时,这个成员变量中就增加了一个对此nID的映射,
这样导致其它信赖这个成员变量的成员函数就会出错:m_map中多了逻辑上不存在的映射关系;
而我自以为是此种写法没有向m_map中增加实例,仅当对m_map赋值时才向他内部增加一个实例即映射关系,
形如:structTstPntInfo = stA; m_map[niD] = &stA; 事实上从map中取映射值时也会向map中增加实例;
总结:
1。对map的重载操作符[]而言,情况是不是这样的:只要调用了这个重载符,则首先向内部找是否存在这个映
射,若无则增加一个实例。
2。我在工作以外(生活中)还有多少自以为是的地方!!!若也有很多如此在自以为是,真是恐怖!!!我在生活中又应该如何不要犯如此自以为是的错误呢?这也是我现在想想就从床上爬起来写下这些的一个重要原因(现在是20070929凌晨5:36)
对于我这个总结我不能再犯自以为是的错误,有两点明天要查明:
1。[]是不是map的重载符;
2。是不是调用[]时,先查找映射关系,若不存在就产生一个实例;