2011-01-20 37 views
5

Sau khi đọc các cuộc thảo luận về nhà điều hành < cho std :: weak_ptr, tôi không thể thấy bất kỳ lý do tại sao xác định std :: hash để sử dụng khối điều khiển cho std :: weak_ptr sẽ không hoạt động. Tôi cũng không thể tin rằng điều này đã bị bỏ qua bởi ủy ban tiêu chuẩn. Có ai đọc thảo luận liên quan về chủ đề này không?Tại sao std :: hash không được định nghĩa cho std :: weak_ptr trong C++ 0x?

Edit: Thảo luận về điều hành < cho std :: weak_ptr http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1590.html

Trả lời

3

tôi hơi quen thuộc với lịch sử. Có một bài báo sau này bạn cũng nên đọc:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2637.pdf

Và tôi tin giấy sau đây là những gì thực sự là trong dự thảo hiện hành. Tóm lại, shared_ptr có toán tử dựa trên giá trị <() chức năng thành viên dựa trên quyền sở hữu owner_before. weak_ptr chỉ có cái sau.

Dự đoán tốt nhất của tôi là hỗ trợ băm cho weak_ptr đơn giản đã bị loại bỏ. Không ai đề xuất hỗ trợ băm cho weak_ptr theo sự hiểu biết tốt nhất của tôi. Đã có rất nhiều vấn đề trong việc đưa C++ 0x vào tiêu chuẩn hóa, một lượng thời gian và nguồn lực hạn chế để giải quyết các vấn đề, và không nghi ngờ gì sẽ có những sai sót và những phần còn thiếu.

Tôi cũng nghĩ rằng để thêm hỗ trợ băm cho weak_ptr nó sẽ phải được thực hiện tương tự với owner_before: Thêm hàm thành viên owner_hash vào cả shared_ptr và weak_ptr. Tôi nghi ngờ nó là quá muộn để làm điều này cho C + + 0x, nhưng điều này có vẻ giống như một đề nghị TR2 hợp lý.

+0

Hóa ra Nhật Bản thực sự đã báo cáo điều này. – SamB

2

Nó chỉ ra rằng Nhật Bản phàn nàn về điều này (xem lwg issue 1406), và đó chính xác những gì Howard đề nghị trong his answer đã được đề xuất như là giải pháp. Thật không may, nó đã bị trì hoãn (có lẽ là vì những ràng buộc về thời gian).

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