我有一个名为Mesh
的类,其中包装了OpenGL对象,并带有VBO,纹理等。该类继承自QObject
且其父级设置为我的QGLWidget
。因此,一旦我关闭小部件,它将被QObject系统删除。
但我有一个问题,因为此网格类具有一个析构函数,该析构函数执行一些OpenGL调用进行清理。当QObject子析构函数启动时,OpenGL上下文已经被破坏,并且出现了段错误。
如何确保在删除~Mesh()
上下文之前调用QGLWidget
析构函数?
最佳答案
您可以在Mesh
派生类的析构函数中显式删除QGLWidget
对象,因为您放入其中的所有内容都将在~QGLWidget()
本身之前执行(并且在~QObject()
之前负责删除子对象) 。
或者,可以使对象成为非指针成员,或将其包装在智能指针中以达到相同的结果。