自由的选择注意或忽略你写的inline关键字,而且它们还会背着你制造一些内联。这是另一个要你保持轻量级的构造函数的原因,这样堆栈中的对象就不会因为有大量的内联代码而膨胀。同时也要小心重载运算符,即使是最简短的表达式如m1=m2*m3如果m2和m3是矩阵的话,也可能产生大量的内联代码。一定要深入了解你的编译器对于内联的设置。
启用运行时类型信息(RTTI)需要编译器为每一个类产生一些静态信息。RTTI一般来说是缺省启用的,这样我们的代码可以调用dynamic_cast以及检测一个对象的类型,考虑完全禁止使用RTTI和dynamic_cast以节省空间(进一步的说,有时候 dynamic_cast在某些实现中需要付出很高的代价)另一方面,当你真的需要有基于类型的不同行为的时候,增加一个不同行为的虚函数。这是更好的面向对象
设计(注意static_cast与这不同,它的效率和C语言的类型转换一样)。
5、标准类库(STL)
标准类库是一套实现了常见的结构和算法的模板,例如dynamic arrays(称为vector),set,map等等。使用STL可以节省你很多时间来写和调试那些容器。和之前谈到的一样,如果希望
系统的效率最大化,你必须要注意你的STL的具体实现的细节。
为了能够对应于最大范围的应
用,STL标准在内存分配这个领域保持了沉默。在STL容器中的每一个操作都有一定的效率保证,例如,给一个set进行插入操作只要O(log n)的时间,但是,对一个容器的内存使用没有任何保证。
让我们来仔细了解游戏开发中的一个非常普遍的问题:你希望保存一组对象,(我们会称其为对象
列表,虽然不一定要保存在STL的列表中)通常你会要求每个对象在这个表有且仅有一个,这样你就不用担心一个偶然产生的在容器中插入一个已存在单元的操作了。STL的set忽略副本,所有的插入、删除和
查询的速度都是O(log n),这是不是就