0
이 중 하나가 작동하고 다른 하나는 작동하지 않는 이유에 대해 혼란 스럽습니다. 나는 (대부분) 복사 생성자가 성공 두 경우 모두, 첫 번째 지점은 사람이 여기에 갈 수 있는지에 대한 제안 사항이 않음 delete
이전 포인터를 삭제할 수 없습니다 (segfault)
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;
}
불구하고에 segfaulting되고, 카메라 컨트롤러의 스위칭을 가능하게하기 위해 노력하고있어? 두 번째 지점은 잘 작동합니다 (
delete old_cam;
수 있습니다).
무언가가 충돌하지 않는다고해서 그것이 올바른 것은 아닙니다. 'mController'는 항상 스칼라의 새로운 표현식으로 만들어 졌다고 확신합니까? '카메라'는 가상 소멸자가 있습니까? – aschepler
흠 당신은 분명히 뭔가에있어, ArcballCamera는 소멸자에서 실제로 아무것도 수행하는 유일한 사람입니다. 나는 그것들을 조사 할 것이고, 나는 당신이 논평 한 후에 "smartpointers 이외의"것을 추가했다. 다시 게시 할 가능성이 높습니다. 답변에 대한 의견을 말하도록 요청할 수 있습니다. :) – sjm324