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