最近,我注意到我的引擎绝对未优化,因此我决定进行一些清理。在实现了某些筛选算法之后,我打开Windows任务管理器以查看我的应用程序使用了多少内存。由于我对“ new”和“ delete”运算符进行了简短的研究,因此我尝试使用它们来更有效地使用内存。例如:
void DrawSkybox()
{
p_Device->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE );
D3DXVECTOR3* Scal = new D3DXVECTOR3(1.5f, 1.5f, 1.5f);
D3DXVECTOR3* Rot = new D3DXVECTOR3(0, 0, 0);
obj_Skybox->Transform(&vec3_camera_viewPos, Scal, Rot);
DrawObject(p_Device, obj_Skybox, NULL, NULL, NULL, false);
p_Device->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE );
delete Scal;
delete Rot;
}
在我第一次编译并执行Engine的调试版本时,我收到一个错误:“调试断言失败”。然后,我作为发行版编译并执行了我的引擎-一切都很好。那是什么问题呢?
您最好应该以这种方式重构您的代码,而不要费心new
和delete
:
void DrawSkybox() {
p_Device->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE );
D3DXVECTOR3 Scal(1.5f, 1.5f, 1.5f); // <<<< Just use stack
D3DXVECTOR3 Rot (0, 0, 0); // <<<< allocated variables ...
obj_Skybox->Transform(&vec3_camera_viewPos, &Scal, &Rot); // <<< ... and pass
// their addresses
DrawObject(p_Device, obj_Skybox, NULL, NULL, NULL, false);
p_Device->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE );
}
我再也无法告诉您有关实际断言失败的详细信息,但是它仅在调试模式下发生,而发布模式下的编译代码不会注意到发生了什么。
错误似乎源于其他地方的代码中的某些不同之处,但不应该源于仅引入delete
语句。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句