클래스 QNetworkReply의 객체가 있습니다. finished() 신호에 연결된 슬롯 (다른 객체에 있음)이 있습니다. 신호는 동기 신호입니다 (기본 신호). 스레드는 하나뿐입니다.delete 및 deleteLater는 Qt의 신호 및 슬롯과 관련하여 어떻게 작동합니까?
어느 순간 어느 순간 나는 두 개체를 모두 없애기를 원합니다. 더 이상 신호 나 그로부터 아무것도. 나는 그들이 사라지길 바란다. 글쎄, 난 내가
delete obj1; delete obj2;
를 사용합니다 생각하지만 난 정말 할 수 있습니까? ~ QObject를위한 사양 말 : 보류중인 이벤트가 충돌을 일으킬 수 있습니다 전달 될 기다리는 동안
는 QObject를 삭제.
'보류중인 이벤트'는 무엇입니까? 내 delete
으로 전화하는 동안 이미 '보류중인 이벤트'가 전달되어 충돌이 발생할 수 있으며 실제로 있는지 확인할 수 없습니까?
그래서 내가 전화를 가정 해 봅시다 :
obj1->deleteLater(); obj2->deleteLater();
는 안전을 위해.
하지만 정말 안전합니까? deleteLater
은 제어가 도착할 때 주 루프에서 처리 될 이벤트를 추가합니다. 이미 obj1
또는 obj2
에 대한 보류중인 이벤트 (신호)가있을 수 있습니까? 으로 처리되기를 기다리고 있습니다. deleteLater가 처리됩니까? 그것은 매우 불행한 일입니다. 나는 약간의 삭제 된 상태에 대한 코드 검사를 쓰고 모든 슬롯에서 들어오는 신호를 무시하고 싶지 않습니다. QObjects 삭제
'obj-> disconnect();처럼 보입니다. obr-> deleteLater();가 올바른 방법입니다. – stach