2014-11-27 2 views
0

:Qt에서 자동으로 연결이 끊어 집니까? 문제는 여기에서

MyQClass* A = new MyQClass(); 
connect(A,SIGNAL(A_S()),this,SLOT(B_S())); 
A->deleteLater(); 
... 
disconnect(A,SIGNAL(A_S()),this,SLOT(B_S())); 

이가 충돌의 원인이됩니다 Qt Signals and Slots object disconnect? 내가 처음이 QObject를에 삭제를 호출하면, 나는이 같은 분리 기능이 전화를? 나는 그것이 Qt4가 아니라 Qt5가 아니라는 것을 발견했다. 다른 Qt 버전이 다른 것을하고 있습니까? 그렇지 않으면 내 코드에 다른 문제가있을 수 있습니다.

+3

왜이 작업을 수행할까요? 연결이 자동으로 끊어집니다. [*'QObject :: ~ QObject() :'객체와의 모든 신호는 자동으로 연결이 끊어집니다 *] ​​(http://qt-project.org/doc/qt-5/qobject.html#dtor.QObject). – thuga

답변

1

개체가 파손되면 연결이 자동으로 끊어집니다. 파괴 된 객체에서 연결 해제를 호출하려고하기 때문에 충돌이 발생했을 수 있습니다. 매달려있는 포인터 A (더 이상 존재하지 않는 객체에 주소가 있음)가 나타납니다. 하지만 이것은 "..."이 무엇인지에 달려 있습니다.

+0

"..."중에 A를 사용하여 아무 것도하지 않았으며 호출 스택을 검사 한 후 disconnect()로 인해 충돌이 발생했음을 확인합니다. 당신은 친절하게 "더 많은 것에 대해 설명 할 수 있겠습니까? 그러나 이것은 약간"... "에 달려 있습니다." – Nyaruko

+0

포인터 A를 바꿀 수 있습니다. 아니면 어떤 상태 일 수있었습니다. 단지 이론적 인 것이 었습니다. 또한 "..."의 이벤트 루프로 돌아와 매달리는 포인터 버그를 유발할 필요가 있습니다. – Silicomancer

관련 문제