Làm cách nào để truy cập vào các thành phần unique_ptr của vùng chứa (thông qua trình lặp) mà không lấy quyền sở hữu khỏi vùng chứa? Khi một người nhận một trình lặp đến một phần tử trong vùng chứa là quyền sở hữu phần tử vẫn còn với vùng chứa? Làm thế nào về khi một dereferences iterator để đạt được quyền truy cập vào unique_ptr? Điều đó có thực hiện một động thái ẩn của unique_ptr không?Lặp lại một container của unique_ptr
Tôi thấy mình đang sử dụng shared_ptr rất nhiều khi tôi cần lưu trữ các phần tử trong vùng chứa (không theo giá trị), ngay cả khi vùng chứa sở hữu khái niệm các phần tử và mã khác chỉ đơn giản là muốn thao tác các phần tử trong vùng chứa. sợ không thể truy cập các phần tử unique_ptr trong vùng chứa mà không có quyền sở hữu được lấy từ nó.
Mọi thông tin chi tiết?
Được rồi, tôi nghĩ rằng làm rõ mọi thứ cho tôi. Tôi đã có thói quen sử dụng hàm for_each mới với lambda có tham số là phần tử được truyền theo giá trị, KHÔNG bằng tham chiếu, nhưng tôi đoán tôi sẽ phải tham chiếu cho các phần tử unique_ptr nếu tôi muốn tránh một lần thử sao chép/di chuyển. P.S. nếu tôi dereference iterator một lần, và có một tham chiếu đến kết quả đó, tôi giả định này tránh một bản sao cố gắng? Ý tôi là: 'cho (Container :: iterator it = container.begin(); it! = Container.end(); it ++) { unique_ptr & element = &*it; // Không có bản sao nào? } ' Cảm ơn Howard, btw. –
Vâng, tôi nghĩ rằng nó sẽ hoạt động tốt. Mặc dù bạn có thêm '&' trong mã của mình. Nhưng trình biên dịch sẽ cho bạn biết ở đâu. –
Bạn có thể dereference nó vào một: blah & element = ** it; vẫn không có một bản sao, tôi nghĩ vậy. (Có lẽ hữu ích hơn.) –