Có một đối tượng của lớp QNetworkReply. Có một khe (trong một số đối tượng khác) được kết nối với tín hiệu đã hoàn thành() của nó. Tín hiệu là đồng bộ (các tín hiệu mặc định). Chỉ có một chủ đề.Cách xóa và xóaLater hoạt động liên quan đến tín hiệu và vị trí trong Qt?
Tại một thời điểm nào đó, tôi muốn loại bỏ cả hai đối tượng. Không có thêm tín hiệu hoặc bất cứ điều gì từ họ. Tôi muốn họ đi. Vâng, tôi nghĩ, tôi sẽ sử dụng
delete obj1; delete obj2;
Nhưng tôi có thể thực sự không? Thông số kỹ thuật cho ~ QObject nói:
Xóa QObject trong khi đang chờ sự kiện đang chờ phân phối có thể gây ra sự cố.
'Sự kiện đang chờ xử lý' là gì? Điều đó có nghĩa là khi tôi gọi số delete
của mình, đã có một số 'sự kiện đang chờ xử lý' được phân phối và chúng có thể gây ra sự cố và tôi thực sự không thể kiểm tra xem có bất kỳ sự cố nào không?
Vì vậy, chúng ta hãy nói rằng tôi gọi:
obj1->deleteLater(); obj2->deleteLater();
Để được an toàn.
Nhưng, tôi có thực sự an toàn không? Các deleteLater
thêm một sự kiện sẽ được xử lý trong vòng lặp chính khi kiểm soát được ở đó. Có thể có một số sự kiện đang chờ xử lý (tín hiệu) cho obj1
hoặc obj2
đã có, đang chờ xử lý trong vòng lặp chính trước khi deleteLater sẽ được xử lý? Điều đó sẽ rất không may. Tôi không muốn viết mã kiểm tra cho tình trạng 'hơi bị xóa' và bỏ qua tín hiệu đến trong tất cả các khe của tôi.
Có vẻ như 'obj-> disconnect(); obj-> deleteLater(); 'là đúng cách để đi: – stach