|
我写了一段代码 用一个NodeVisitor来将场景中的所有Scribe去掉 代码如下:- void ClearSelectionNodeVisitor::apply(Node& node){
- Node::ParentList parentList=node.getParents();
- for(Node::ParentList::iterator it=parentList.begin();
- it!=parentList.end();++it){
- Group* gp=*it;
- Scribe* parent=dynamic_cast<Scribe*>(gp);
- if(gp&&parent)
- {
- Node::ParentList ancestorList=gp->getParents();
- for(Node::ParentList::iterator ast=ancestorList.begin();
- ast!=ancestorList.end();++ast){
- (*ast)->replaceChild(gp,&node);
- }
- it=parentList.begin ();
- }
- }
- traverse(node);
- }
复制代码 基本算法如下:
1.找到当前节点的所有父节点
2.如果其中某一个为Scribe, 那么找到这个Scribe的所有父节点,然后用当前节点替换Scribe.
在离开这个函数后 系统挂掉了.根据我的推测是因为我修改了场景导致系统中某个结构(比如某个iterator)出现异常了.
这段代码有什么问题吗? |
|