我使用C ++和freeglut,并想知道如何使用new
删除动态分配的内存。关闭窗口时我需要释放内存。我应该把这个delete pointer
放在哪里?在glutMainLoop()
之前?
*的 更新 *
例如,我使用int *ptr = new int[n]
来存储顶点坐标,并且没有在代码中使用类。所以我必须在delete
中调用main()
来释放内存。我知道我可以使用vector来做同样的事情。但在我的情况下,如果我必须使用new
,我怎样才能释放内存?
答案 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)
使用智能指针,您无需担心。