Có một lý do nào đó unique_ptr::reset
không có quá tải mất const deleter&
và deleter&&
để phù hợp với các nhà thầu của nó mà lấy những đối số đó làm đối số thứ hai không?Tại sao không unique_ptr :: đặt lại có quá tải mà có một deleter?
Trình gỡ rối được lưu trữ trong unique_ptr
sẽ được sao chép hoặc chuyển nhượng được gán với đối số từ reset
. Nếu deleter là noncopyable hoặc nonmovable, gọi quá tải tương ứng của reset
sẽ không biên dịch. Điều này có vẻ như nó sẽ là hành vi nhất quán với các nhà thầu.
+1 để có câu trả lời duy nhất _authoritative_ cho câu hỏi 'tại sao'. – ildjarn
Nó sẽ không được sạch hơn và phù hợp hơn với shared_ptr nếu có một chức năng thiết lập lại? Đối với tôi, nó cảm thấy đặc biệt sạch hơn khi bạn có một chức năng tùy chỉnh deleter. Ví dụ: 'ptr = unique_ptr (new_raw_ptr, deleter_function);' vs 'ptr.reset (new_raw_ptr, deleter_function);'. Hoặc thậm chí tốt hơn nếu chúng ta có thể giữ cùng một deleter_function, vì vậy nó sẽ giống như: 'ptr.reset (new_raw_ptr);'. –
felipou
@felipou: Công trình thứ hai.Đối với các cựu, đây là cách * bạn * có thể làm cho nó xảy ra: http://cplusplus.github.io/LWG/lwg-active.html#submit_issue –