我很困惑为什么其中一个会起作用而另一个不起作用。我试图启用相机控制器的切换,在这两种情况下(大多数)复制构造函数都成功,第一个分支是delete
上的分段但是
if (type == controllers::Camera::Type::Arcball) {
controllers::Camera *old_cam = mController;
mController = new controllers::ArcballCamera(*old_cam);
delete old_cam;//!!! this segfaults
return true;
}
else if (type == controllers::Camera::Type::Fly) {
controllers::Camera *old_cam = mController;
mController = new controllers::FlyCamera(mGLFWWindow, *old_cam);
delete old_cam;
return true;
}
有没有人对这里发生的事情提出建议?第二个分支工作正常(可以delete old_cam;
)。
答案 0 :(得分:0)
我没有正确关闭FlyCamera
中的线程,线程捕获this
,这是发生最终段错误的地方。谢谢@aschepler指出本应该显而易见的东西,析构函数是一个问题,应该从一个可以被删除的事实中明显看出,但另一个不可能!