節點的刪除 同時刪除所有繫結要節點上的物件

2021-05-22 04:53:00 字數 1617 閱讀 5993

1.關於節點的刪除:

1.分析:

0.scenemanager從節點列表中刪除節點

1.要從父節點中刪除該節點.

2.基於ogre設計的設計.scenenode沒有提供銷毀movableobject物件的函式.但是有解綁與遍歷movable的能力.此問題簡單為解綁movable

3.節點上一般都擁有一系列的movableobject物件.繫結在其上的movableobject也應該被銷毀.

4.scenenode上還可以有childscenenode.因此.這些childscenenode也應當被銷毀

5.記憶體的釋放

2.解析ogre提供的功能:

1.scenemanager::destroyscenenode:

1.從父節點清除該節點.不再對其更新.   --  解決了問題1

2.delete 該節點.  --  解決了問題5  --  由於在析構函式裡對所有object進行了解綁.所以同時也解決了問題2

3.從節點列表中移除該節點  --  解決問題0

2.scenenode::detachallobjects:

1.對所有movableobject解除繫結  --  解決問題2

3.scenenode::getattachedobjectiterator:

1.獲得movableobject的迭代器  --  可以用來解決問題3

4.scenenode::removeanddestroyallchildren:

1.呼叫scenemanager對每個子節點進行刪除.可解決該子節點的問題0,1,5.但此函式沒什麼用.

5.scenemanager::destroymovableobject:

1.進行所有型別的movableobject的刪除.解決問題3

// scenemanager::destroyentity:destroycamera...等等

// 1.不能解決所有movableobject的刪除.

3.綜上.

1.對繫結在節點上的movableobject的刪除與所有子節點的刪除是主要問題.

2.對每個節點:

1.遍歷所有子節點.對子節點進行刪除(每個節點都是相同的處理.)

2.遍歷並刪除所有movableobject物件 --  解決問題3

3.scenemanager::destroyscenenode --  解決問題0,1,2,5

4.實現:

// 從vim複製過來...**變形...

void scenemanager::destroyscenenode( ogre::scenemanager* pscenemanager, ogre::scenenode *pscenenode )

// 遍歷刪除子節點

ogre::scenenode::childnodeiterator iterchild = pscenenode->getchilditerator();

while ( iterchild.hasmoreelements() )

// scenemanager::destroyscenenode --  解決問題0,1,2,5

pscenemanager->destroyscenenode( pscenenode );

}

同步刪除被刪除節點的所有子節點 BOM節點刪除

create table tb id int,pid int,name nvarchar 10 insert tb select1,null,山東省 union allselect2,1,煙台市 union allselect4,2,招遠市 union allselect3,1,青島市 union ...

JavaScript動態增加節點和刪除節點

其實html就是類似於xml,曾經w3c希望使用xml替代html,這就是說明,html和xml還是有一定的共同特點 的,所以說,對於xml,我們有解析和動態增加或者減少節點的功能,這個如果用在html上面,那就是能動態的增加 一些按鈕,超連結等等的html元素,這樣的網頁動態效果會更好,下面我們來...

移除鍊錶元素 刪除所有val的節點

如圖我們要刪除值為val的所有元素 我的思路 1.出於空間複雜度的考慮我們這只例項化乙個節點node用來當作刪除後鍊錶的頭節點 2.我們用node1 node記錄頭節點 3.當head null時我們判斷head.val vall如果是true 則使node.next head.next 4.否則 ...