Lines từ Anthony Williams cuốn sách:std :: di chuyển hoạt động C++
Ví dụ sau đây cho thấy việc sử dụng std :: di chuyển để chuyển quyền sở hữu của một đối tượng động vào một sợi:
void process_big_object(std::unique_ptr<big_object>); std::unique_ptr<big_object> p(new big_object); p->prepare_data(42); std::thread t(process_big_object,std::move(p));
Bằng cách chỉ định
std::move(p)
trong hàm tạostd::thread
, quyền sở hữu củabig_object
được chuyển trước tiên vào nội bộ bộ nhớ cho mới đã tạo chuỗi và sau đó nhập vàoprocess_big_object
.
Tôi hiểu chồng và đống; bất kỳ ý tưởng nào, đây thực sự là bộ nhớ trong nội bộ?
Tại sao họ không thể chuyển quyền sở hữu trực tiếp đến process_big_object
?
mỗi luồng có ngăn xếp riêng. Đối tượng thread cần trước tiên yêu cầu tạo ngăn xếp của riêng nó và các tài nguyên hệ điều hành khác trước khi nó có thể gọi hàm của bạn với ngăn xếp của chính nó làm cơ sở. Vì vậy, nó cần lưu trữ dữ liệu ở đâu đó trước khi gửi đến chức năng của bạn. – PeterT
cảm ơn, @PeterT. đã trả lời phần cuối của ques của tôi. –