2014-06-24 2 views
0

VBF, 텍스처 등으로 랩핑하고 OpenGL 개체 인 Mesh이라는 클래스가 있습니다.이 클래스는 QObject에서 상속 받고 부모는 내 QGLWidget으로 설정됩니다. 따라서 위젯을 닫으면 곧 QObject 시스템에 의해 삭제 될 것입니다.QGLWidget 컨텍스트 파기

하지만이 메쉬 클래스에는 정리에 대한 OpenGL 호출을 일부 수행하는 소멸자가 있기 때문에 문제가 있습니다. QObject 자식 소멸자가 시작되면 OpenGL 컨텍스트가 이미 파괴되고 segfault가 생깁니다.

~Mesh() 소멸자가 호출되어 QGLWidget 컨텍스트가 삭제되기 전에 어떻게 확인할 수 있습니까? 당신이 ~QGLWidget() 자체 전에이 실행됩니다 넣어 모든 때문에

+0

QOpenGLContext를 확인하고 직접 관리하는 것이 좋습니다. – Ben

답변

1

당신은, 당신의 QGLWidget 파생 클래스의 소멸자에 명시 적으로 Mesh 개체를 삭제할 수 있습니다 (그리고 자식 개체의 삭제에 대한 책임 ~QObject() 전).

개체를 포인터가 아닌 멤버로 만들거나 똑같은 결과를 얻기 위해 스마트 포인터로 래핑 할 수 있습니다.