Đối với boost::weak_ptr
các operator<
được xác định, để nó có thể được sử dụng trong các thùng chứa kết hợp.thứ tự sắp xếp tăng :: weak_ptr sau khi hết hạn?
Câu hỏi của tôi là: Thứ tự sắp xếp của một số đối tượng weak_ptr
có ổn định ngay cả khi một số đối tượng chuyển sang số không? Điều đó có gây rối với các thùng chứa như std::set
không?
Ví dụ:
using namespace boost;
shared_ptr<A> sptrA1(new A);
weak_ptr<A> wptrA1 = sptrA1;
weak_ptr<A> wptrA2;
{ // begin Scope 1
shared_ptr<A> sptrA2(new A);
wptrA2 = sptrA2;
assert(wptrA1 < wptrA2); // assert #1
}
assert(wptrA1 < wptrA2); // assert #2
- sẽ khẳng định # 2 luôn đúng nếu khẳng định # 1 là đúng?
- Có phải
wptrA2
ở cùng một tiểu bang trước và sau Phạm vi 1 không?
Thú vị. Tôi đã bị nhầm lẫn bởi các tài liệu của use_count trong http://www.boost.org/doc/libs/1_43_0/libs/smart_ptr/weak_ptr.htm. Nó tuyên bố "Returns: 0 if * this is empty" tuy nhiên theo câu trả lời của bạn ngược lại (* điều này là trống nếu nó trả về 0) là không đúng, phải không? (Nếu trống được định nghĩa là trạng thái thu được từ mặc định xây dựng một weak_ptr.) –
Tôi chưa thực hiện bất kỳ câu lệnh nào về 'use_count' nào ở đây :) Điều đó nói rằng, cấu trúc đếm tham chiếu nội bộ giữ hai số đếm - một cho chỉ tham chiếu mạnh mẽ (khi nó chạm 0, đối tượng chỉ định bị phá hủy) và một đối tượng bao gồm cả tham chiếu mạnh và yếu (khi nó chạm 0, cấu trúc đếm tham chiếu bị hủy). Hàm 'use_count' có thể đang nhìn vào cái chỉ có số đếm mạnh, nhưng tôi chưa từng điều tra, vì vậy hãy tự kiểm tra. :) – bdonlan