优化C++游戏:对象的创建和销毁
2013-03-07 14:11
218 查看
1、将对象的创建工作推迟到需要时进行
不运行代码时,其速度是最快的;因此对于无需使用的对象,不应该创建它。在循环中声明对象时应小心。如果在循环中将对象的创建的工作推迟到需要时进行,则每次迭代都将创建和销毁该对象。因此最好在循环之前声明对象,这样将只创建和销毁对象一次。如果需要在内嵌的循环中调用一个函数,而该函数在堆栈中创建一个对象,则应在循环的外面创建该对象,并通过引用将其传递给函数。
2、使用初始化列表
如果构造函数体为空,则编译器将对代码进行优化,而不会调用该函数。
3、先递增而不是后递增
代码x=y++存在的问题在于,递增函数必须先复制y的初始值,将y加1,然后再返回y的初始值。因此后递增需要一个创建一个临时对象,而先递增不需要。就整型而言,这不会带来额外的开销;但对于用户定义的类型,这将是不经济的。因此,在可能的情况下,应采用先递增的方式。
4、避免操作符按值返回结果
按值返回结果需要创建临时对象,复制它们的开销太大。有时候,可以对代码进行改编,让编译器能够对代码进行优化,从而避免创建临时对象。(这被称为“返回值优化”)。注意:操作符+=修改第一个参数,而不用返回一个临时对象。因此,在可能的情况下,应使用+=,而不是+。
5、使用轻量级构造函数
如果额外的构造函数能够提高性能,就应该提供它们。如果要防止编译器自动复制对象,则应为相应的类声明一个私有的复制构造函数和操作符=,但不实现它们。这样,任何复制该对象的企图都将导致编译错误。显示地声明一个接收单个参数的构造函数,可以防止编译器在转换类型时生成隐藏的临时对象。
6、预先分配对象并将其保存在缓存中
请求一些新的对象,并将旧对象返回到缓存中,而不是不断的创建和销毁对象。可以将缓存实现为一个模板,这样它将适合于任何类,只要这些类有缺省构造函数。可以在需要对象时进行分配,并将其加入到缓存中,也可以预先分配所有的对象。
不运行代码时,其速度是最快的;因此对于无需使用的对象,不应该创建它。在循环中声明对象时应小心。如果在循环中将对象的创建的工作推迟到需要时进行,则每次迭代都将创建和销毁该对象。因此最好在循环之前声明对象,这样将只创建和销毁对象一次。如果需要在内嵌的循环中调用一个函数,而该函数在堆栈中创建一个对象,则应在循环的外面创建该对象,并通过引用将其传递给函数。
2、使用初始化列表
如果构造函数体为空,则编译器将对代码进行优化,而不会调用该函数。
3、先递增而不是后递增
代码x=y++存在的问题在于,递增函数必须先复制y的初始值,将y加1,然后再返回y的初始值。因此后递增需要一个创建一个临时对象,而先递增不需要。就整型而言,这不会带来额外的开销;但对于用户定义的类型,这将是不经济的。因此,在可能的情况下,应采用先递增的方式。
4、避免操作符按值返回结果
按值返回结果需要创建临时对象,复制它们的开销太大。有时候,可以对代码进行改编,让编译器能够对代码进行优化,从而避免创建临时对象。(这被称为“返回值优化”)。注意:操作符+=修改第一个参数,而不用返回一个临时对象。因此,在可能的情况下,应使用+=,而不是+。
5、使用轻量级构造函数
如果额外的构造函数能够提高性能,就应该提供它们。如果要防止编译器自动复制对象,则应为相应的类声明一个私有的复制构造函数和操作符=,但不实现它们。这样,任何复制该对象的企图都将导致编译错误。显示地声明一个接收单个参数的构造函数,可以防止编译器在转换类型时生成隐藏的临时对象。
6、预先分配对象并将其保存在缓存中
请求一些新的对象,并将旧对象返回到缓存中,而不是不断的创建和销毁对象。可以将缓存实现为一个模板,这样它将适合于任何类,只要这些类有缺省构造函数。可以在需要对象时进行分配,并将其加入到缓存中,也可以预先分配所有的对象。
相关文章推荐
- unity3d通过代码动态创建销毁游戏对象
- Effective java 代码优化实例--创建和销毁对象
- C++创建于销毁对象
- C++对象链表的创建与销毁
- C++用new和不用new创建类对象区别
- QML与c++交互学习笔记(六) 关于qt c++中创建对象,QML获取此对象数据问题
- C++游戏之创建第一个窗体程序(一)
- 数据结构之栈的初始化、创建、入栈、出栈、销毁-c++代码实现及运行实例结果
- C++用new和不用new创建类对象区别
- C++之创建对象时的new与不new
- C++之对象的动态创建和释放
- 创建和销毁对象(3)(4)——避免创建不必要的对象,消除过期对象
- 域对象的创建与销毁
- C++ 对象创建方式
- 创建和销毁对象
- C++ 创建对象的两种方法 new和不new
- 《Effective Java》—— 创建与销毁对象
- 【读书笔记】《Effective Java》——创建和销毁对象
- c++创建对象的两种方式
- Java中共享对象的创建与销毁详解(附源码)