2012-05-13 17 views

Trả lời

31

Vâng, QObject::~QObject destructor chăm sóc đó:

Tất cả các tín hiệu đến và đi từ các đối tượng sẽ được tự động ngắt kết nối, và bất kỳ sự kiện cấp phát gửi cho đối tượng bị loại bỏ khỏi hàng đợi sự kiện.
Tuy nhiên, thường là an toàn hơn khi sử dụng deleteLater() thay vì xóa trực tiếp lớp con QObject.

Đừng chăm sóc mặc dù:

Cảnh báo: Xóa một QObject trong khi chưa giải quyết được chờ đợi sẽ được chuyển giao có thể gây ra một vụ tai nạn. Bạn không được xóa trực tiếp QObject nếu nó tồn tại trong một luồng khác với chuỗi đang thực hiện. Sử dụng deleteLater() thay vào đó, điều này sẽ khiến vòng lặp sự kiện xóa đối tượng sau khi tất cả các sự kiện đang chờ xử lý đã được gửi đến nó.

+0

Cũng lưu ý điều này: "Cảnh báo: Xóa QObject trong khi các sự kiện đang chờ xử lý đang chờ được gửi có thể gây ra sự cố". Sử dụng ['deleteLater()'] (http://qt-project.org/doc/qt-4.8/qobject.html#deleteLater) nếu tình huống này có thể xảy ra. –

+2

cũng phải cẩn thận với lambdas (nếu bạn sử dụng bất kỳ) trong đối tượng đã xóa: chúng KHÔNG bị ngắt kết nối ... đoán cách tôi biết;) – mBardos

+0

Điều này cũng đúng trong Qt5. – RegularlyScheduledProgramming

Các vấn đề liên quan