我有一个名为Mesh的类,其中包装了OpenGL对象,并带有VBO,纹理等。该类继承自QObject且其父级设置为我的QGLWidget。因此,一旦我关闭小部件,它将被QObject系统删除。

但我有一个问题,因为此网格类具有一个析构函数,该析构函数执行一些OpenGL调用进行清理。当QObject子析构函数启动时,OpenGL上下文已经被破坏,并且出现了段错误。

如何确保在删除~Mesh()上下文之前调用QGLWidget析构函数?

最佳答案

您可以在Mesh派生类的析构函数中显式删除QGLWidget对象,因为您放入其中的所有内容都将在~QGLWidget()本身之前执行(并且在~QObject()之前负责删除子对象) 。

或者,可以使对象成为非指针成员,或将其包装在智能指针中以达到相同的结果。

10-08 00:19