Tôi biết rằng khi truyền một đối tượng theo giá trị cho hàm, hàm tạo di chuyển luôn được gọi nếu có, giả sử không có phép sao chép bản sao. Điều gì về việc trả về một đối tượng theo giá trị?Đối tượng có được bảo đảm di chuyển khi nó được trả về không?
Ví dụ: giả sử chúng tôi có một lớp Foo
trong đó có hàm tạo di chuyển và chúng tôi có hàm trả về đối tượng Foo
.
Foo g() {
Foo f;
// do something with f
return f;
}
Nếu chúng tôi giả định không có RVO, thì hàm tạo di chuyển có được bảo đảm không?
Cập nhật: Tôi đoán tôi không thể hiện rõ ý định của mình. Tôi chỉ muốn biết tôi có thể trong trường hợp xấu nhất có đối tượng di chuyển không sao chép. Hoặc RVO hoặc NRVO xảy ra, tôi hạnh phúc. Và tôi cũng nên nói rằng nhà xây dựng di chuyển và chuyển nhượng sẽ không bị xóa và được triển khai đúng cách.
Có, đối tượng địa phương trong lưu trữ tự động được xử lý ngầm như xvalues trong câu lệnh trả về. – ildjarn
@ildjarn: Tôi nghĩ rằng chỉ khi bạn trả lại trực tiếp. Một nơi nào đó trên SO tôi đã được sửa chữa từ nói rằng điều này di chuyển 'f' vào hàm:' return do_something (f); '. – GManNickG
@GManNickG: Tôi không có thời gian cho các tiêu chuẩn hoặc hãy cẩn thận, do đó một bình luận chứ không phải là một câu trả lời. Tôi nghĩ bạn đã đúng. : -] – ildjarn