map[]的正确使用:自以为是导致map的一个错误使用

    技术2022-05-11  122

    今天自己写的棒视图模块与系统联调时出错,花了我一个多小时,终于找出出错原因:简单的说就是没有理解透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。是不是调用[]时,先查找映射关系,若不存在就产生一个实例;

     

     


    最新回复(0)