我建了两个CList,
typedef struct commuNode
{
    int srcPlyr;
    int desPlyr;
};
CList<commuNode, commuNode&> commuListA; 
CList<commuNode, commuNode&> commuListB;
下面我将一个commuNode加到两个表中
ptrCommuNode = new commuNode;
ptrCommuNode->srcPlyr = 1;
ptrCommuNode->desPlyr = 2;
commuListA.AddHead(*ptrCommuNode);
commuListB.AddHead(*ptrCommuNode);我的问题是:
1\这样做是不是不可以?如果在commuListA中将这个结点删除了,是不是在commuListB中这个结点就对应一个无效结点?如果不可以,难道设计成一个按值的LIST么?比如 CList<commuNode, commuNode> commuListA;
2\就单个LIST来说,如果在这个CList中对这个结点进行Remove操作,CList会自动将这个结点delete掉,还是仅仅 从这个LIST中将这个项remove掉?

解决方案 »

  1.   

    CList中只要Remove去除节点》。而不要delete对应new的释放空间,这样ListA remove了,ListB还可以继续访问数据,等到所有List都不要了,再对应的delete
      

  2.   

    1\这样做是不是不可以?如果在commuListA中将这个结点删除了,是不是在commuListB中这个结点就对应一个无效结点?如果不可以,难道设计成一个按值的LIST么?比如 CList <commuNode, commuNode> commuListA; 
    ==如果你只是用CList的Remove函数删除节点,那么这个对象不会被销毁掉,B列表照用无误。2\就单个LIST来说,如果在这个CList中对这个结点进行Remove操作,CList会自动将这个结点delete掉,还是仅仅 从这个LIST中将这个项remove掉?
    ==只可能进行Remove掉,不可能把这个节点对象delete掉,因为CList并不知道这个对象是new出来的,如果自动delete,岂不要崩溃啊。
      

  3.   

    1)两者不相互影响的,当你Add进来的时候,他就在内部给你分配了一块内存放这个结构了。你ListA中删除了那个节点,不关ListB的事情
    他们不是用地址引用的,不是你想当然的都指向了*ptrCommuNode,而是值复制。变成各自的数据单元了
    2)将它其中的那块内存中的东西去掉,也就是你说的List中的这个项Remove掉。原来做拷贝对象的东西无关
      

  4.   

    你说的应该不对,我这里定义LIST时,说的是按引用调用,所以这里加项时,也应该是按引用加的.也就是说,引用的是地址, 而不赋值出来的新元素.