首页 文章

删除openGL中动态分配的内存

提问于
浏览
0

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

  • Update* .

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

3 回答

  • 3

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

  • 1

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

  • 1

    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] 获得指向内存的指针 . 它会自行清理 .

相关问题