Ví dụ:Cần xóa QValidator theo cách thủ công?
QDoubleValidator *validator = new QDoubleValidator();
myInputLineEdit->setValidator(validator);
// delete validator;
Lưu ý: myInputLineEdit là một con trỏ QLineEdit và sẽ bị xóa với mẹ của nó.
Câu hỏi của tôi là, khi nào tôi nên xóa trình xác thực vì nó được tạo thủ công và setValidator() dường như không sở hữu con trỏ này theo tài liệu? Nếu tôi không xóa nó, nó sẽ bị rò rỉ bộ nhớ?
Tôi đã cố xóa nó ngay sau đó, như mã nhận xét và tôi nhận thấy trình xác thực của myInputLineEdit đã trở thành 0 sau đó. Vì vậy, tôi nghĩ rằng tôi có thể cần phải xóa nó sau khi myInputLineEdit bị xóa.
Một ý nghĩ khác là, tôi có thể cung cấp cho trình xác thực một phụ huynh để nó sẽ bị xóa cùng với người phụ trách của nó, đây có phải là cách hay để làm điều đó không? Điều gì xảy ra nếu không có một ứng cử viên tốt để làm cha mẹ?
Cảm ơn
Nếu bạn quan tâm đến lý do tại sao 'setValidator' không nắm quyền sở hữu: có thể vì bạn có thể sử dụng cùng trình xác thực cho nhiều tiện ích con đầu vào, do đó, đó là quyền sở hữu * chia sẻ *.Nhưng QObjects không có quyền sở hữu chung nhưng thay vào đó * duy nhất * quyền sở hữu cha mẹ, vì vậy bạn cần đặt cha mẹ thành * some * widget (chỉnh sửa dòng hoặc cha mẹ của nó, bất kỳ điều gì có ý nghĩa nhất). – leemes