cocos2dx中可以用 stl么?
01-14
感覺cocos2dx里有自己的一套機制吧,那麼還可以用stl么,如果技術上可以,那這麼做好么?
在3.0之後,本著「不重複造輪子」的觀念,我們大量使用了stl。目前的容器類是因為內存易用計數的問題,所以在stl上面封裝了一層。在v3.2已經使用了stl的正則表達式。我覺得自己的編程能力無法超越stl(廢話,顯然不可能),當然和我一起做cocos2d-x的兄弟們也大致如此,所以3.0之後能用stl的地方,我們就盡量用stl,避免重複造輪子。
理論上是可以用STL的,但是最好將STL的應用限制在Model層,在View和Controller層不要使用STL。即把STL的部分和Cocos2d的部分隔離開。
因為STL的內存管理思路和Cocos2dx的內存管理思路完全不一樣,Cocos2dx本身的內存管理就有很多坑啦,你再加上STL,就更加複雜,一旦使用不當,很容易造成內存泄露。
完全可以,2012年做項目的時候用過。
所有繼承自 ccobject 對象 實體 不要放到stl 容器裡面, 但是指針 可以放。 因為 對象本身 如果放在stl容器中 ,在容器析構的時候,調用對象的析構函數,如果是指針則不會有這個問題。
容器存指針主要問題是,如果對象已經釋放,那麼容器中的指針值就會指向錯無效內存區域。
如果stl容器先於對象析構,則沒有問題。從cocos2d-x 3.0版本開始,cocos2d-x的風格正在努力向標準c++看齊,原則上是鼓勵使用stl的,但cocos2d-x使用的是引用計數的內存管理方式,因此如果你的元素是引擎內置類型(由引擎進行內存管理),在容器選擇上優先用cocos::Vector和cocos::Map;其它情況,盡量都使用stl。
另外,C++11引入右值引用的概念,大大減少了對象拷貝成本,因此為了避免自己管理內存,盡量在棧上存儲對象。3.0中就推薦使用 Vector Map Value了,原來的CCArray CCDictionary之類的結構就已經摒棄了,更加符合C++的開發風格。
推薦閱讀:
※微軟有比較棒的遊戲部門或者旗下工作室嗎?
※大型遊戲是如何考慮 MOD 的?
※中國為什麼不能開發出像絕地求生這樣的現象級遊戲作品呢?
※像爐石這樣的卡牌類遊戲是如何實現AI的?
※最早的遊戲升級系統是主機機能限制的權宜之計,還是美工師和程序員偷懶的產物?是否可以視為欺騙糊弄玩家?