Tôi đọc trong another question rằng khi triển khai một hàm tạo di chuyển, thực hành tốt là std :: di chuyển mỗi thành viên trong danh sách khởi tạo vì nếu thành viên đó là đối tượng khác thì đối tượng di chuyển sẽ được gọi. Giống như vậy ...std :: di chuyển bên trong nhà điều hành chuyển nhượng
//Move constructor
Car::Car(Car && obj)
:
prBufferLength(std::move(obj.prBufferLength)),
prBuffer(std::move(obj.prBuffer))
{
obj.prBuffer = nullptr;
obj.prBufferLength = 0;
}
Tuy nhiên, trong tất cả các toán tử gán mẫu tôi đã thấy, không có đề cập đến việc sử dụng std :: di chuyển cùng lý do. Nếu thành viên là một đối tượng thì nên std :: di chuyển được sử dụng? Giống như rất ...
//Move assignment
Car Car::operator=(Car && obj)
{
delete[] prBuffer;
prBufferLength = std::move(obj.prBufferLength);
prBuffer = std::move(obj.prBuffer);
obj.prBuffer = nullptr;
obj.prBufferLength = 0;
return *this;
}
UPDATE:
Tôi đánh giá cao không có nhu cầu sử dụng std :: di chuyển trong ví dụ tôi đã chọn (kém) tuy nhiên tôi quan tâm đến việc nếu các thành viên là đồ vật.
Tôi chắc chắn cũng quan tâm đến một số làm rõ về điểm này. – goji
'Tôi đọc trong câu hỏi khác', bạn có thể liên kết câu hỏi đó không? Trong ví dụ của bạn không có lý do gì để sử dụng 'std :: move'. –
@JesseGood xem chỉnh sửa, cảm ơn – TomP89