您的位置:首页 > 编程语言 > C语言/C++

优化C++游戏:对象的创建和销毁

2013-03-07 14:11 218 查看
1、将对象的创建工作推迟到需要时进行
不运行代码时,其速度是最快的;因此对于无需使用的对象,不应该创建它。在循环中声明对象时应小心。如果在循环中将对象的创建的工作推迟到需要时进行,则每次迭代都将创建和销毁该对象。因此最好在循环之前声明对象,这样将只创建和销毁对象一次。如果需要在内嵌的循环中调用一个函数,而该函数在堆栈中创建一个对象,则应在循环的外面创建该对象,并通过引用将其传递给函数。
2、使用初始化列表
如果构造函数体为空,则编译器将对代码进行优化,而不会调用该函数。
3、先递增而不是后递增
代码x=y++存在的问题在于,递增函数必须先复制y的初始值,将y加1,然后再返回y的初始值。因此后递增需要一个创建一个临时对象,而先递增不需要。就整型而言,这不会带来额外的开销;但对于用户定义的类型,这将是不经济的。因此,在可能的情况下,应采用先递增的方式。
4、避免操作符按值返回结果
按值返回结果需要创建临时对象,复制它们的开销太大。有时候,可以对代码进行改编,让编译器能够对代码进行优化,从而避免创建临时对象。(这被称为“返回值优化”)。注意:操作符+=修改第一个参数,而不用返回一个临时对象。因此,在可能的情况下,应使用+=,而不是+。
5、使用轻量级构造函数
如果额外的构造函数能够提高性能,就应该提供它们。如果要防止编译器自动复制对象,则应为相应的类声明一个私有的复制构造函数和操作符=,但不实现它们。这样,任何复制该对象的企图都将导致编译错误。显示地声明一个接收单个参数的构造函数,可以防止编译器在转换类型时生成隐藏的临时对象。
6、预先分配对象并将其保存在缓存中
请求一些新的对象,并将旧对象返回到缓存中,而不是不断的创建和销毁对象。可以将缓存实现为一个模板,这样它将适合于任何类,只要这些类有缺省构造函数。可以在需要对象时进行分配,并将其加入到缓存中,也可以预先分配所有的对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: