我使用C和freeglut,并想知道如何使用 new
删除动态分配的内存 . 关闭窗口时我需要释放内存 . 我应该把它放在哪里 delete pointer
?在 glutMainLoop()
之前?
- Update* .
例如,我使用 int *ptr = new int[n]
来存储顶点坐标,并且在代码中没有使用类 . 所以我必须在 main()
中调用 delete
来释放内存 . 我知道我可以使用vector来做同样的事情 . 但在我的情况下,如果我必须使用 new
,我该如何释放内存?
3 回答
请参阅OpenGL GLUT FAQ中的问题3.0.70 . 简短的回答是使用通过atexit()调用安装的退出处理程序 .
使用智能指针,您无需担心它 .
GLUT的旧形式使得程序的执行从未从调用
glutMainLoop
返回 . FreeGLUT摆脱了这一点,但只有你在调用glutMainLoop
之前特别要求它:这意味着,当你最终调用
glutLeaveMainLoop
时,FreeGLUT将从调用glutMainLoop
的地方继续,就像常规函数调用一样 .因此,如果您在
glutMainLoop
之前分配内存,则可以在之后删除该内存 .话虽如此:
为什么不是
std::vector<int> mem(n);
而不是指针?你仍然可以通过&mem[0]
获得指向内存的指针 . 它会自行清理 .