Có một điều về std::thread
mà tôi không hiểu: lý do tại sao hàm tạo của std::thread
có chức năng để chạy theo rvalue?Tại sao std :: thread có chức năng chạy theo rvalue?
Tôi thường muốn chạy một Functor với một số thành viên khác. Như thế này:
struct Function
{
void operator() (/* some args */)
{
/* some code */
}
/* some members */
}
void run_thread()
{
Functor f(/* some data */);
std::thread thread(f, /* some data */);
/* do something and wait for thread to finish */
}
Với thực hiện hiện tại std::thread
Tôi phải chắc chắn đối tượng của tôi đang triển khai ngữ nghĩa di chuyển. Tôi không hiểu tại sao tôi không thể vượt qua nó bằng cách tham chiếu.
Câu hỏi bổ sung là: có nghĩa là gì khi tham khảo hàm theo giá trị rvalue? Lambda biểu hiện?
'std :: constructor của thread' có chức năng của nó bằng cách chuyển tiếp tham chiếu. –
Đối tượng của bạn không cần triển khai ngữ nghĩa di chuyển. Nếu di chuyển không được hỗ trợ, nó chỉ là khu nghỉ mát để sao chép. – nwp
@nwp: những gì trong trường hợp, khi đối tượng đã xóa bản sao xây dựng? Tại sao bản sao là cần thiết? –