删除openGL中动态分配的内存

时间:2011-09-09 21:32:30

标签: c++ glut

我使用C ++和freeglut,并想知道如何使用new删除动态分配的内存。关闭窗口时我需要释放内存。我应该把这个delete pointer放在哪里?在glutMainLoop()之前?

*的 更新 *

例如,我使用int *ptr = new int[n]来存储顶点坐标,并且没有在代码中使用类。所以我必须在delete中调用main()来释放内存。我知道我可以使用vector来做同样的事情。但在我的情况下,如果我必须使用new,我怎样才能释放内存?

3 个答案:

答案 0 :(得分:3)

GLUT的旧形式使得程序的执行从未从调用glutMainLoop返回。 FreeGLUT摆脱了这一点,但只有在你调用glutMainLoop之前特别要求它:

glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_CONTINUE_EXECUTION);

这意味着,当您最终调用glutLeaveMainLoop时,FreeGLUT将从调用glutMainLoop的位置继续,就像常规函数调用一样。

因此,如果您在glutMainLoop之前分配内存,则可以在之后删除该内存。

话虽如此:

  

我使用int *ptr = new int[n]来存储顶点坐标

为什么不是std::vector<int> mem(n);而不是指针?您仍然可以通过&mem[0]获取指向内存的指针。它会自行清理。

答案 1 :(得分:2)

请参阅OpenGL GLUT FAQ中的问题3.0.70。简短的回答是使用通过atexit()调用安装的退出处理程序。

答案 2 :(得分:1)

使用智能指针,您无需担心。