Tôi đã một hàm trả về một vector hoặc thiết lập:Làm thế nào để tránh được những bản sao khi tôi trở
set<int> foo() {
set<int> bar;
// create and massage bar
return bar;
}
set<int> afoo = foo();
Trong trường hợp này, tôi có thể tạo một không gian bộ nhớ tạm thời chức năng foo(), và sau đó gán nó đến afoo
bằng cách sao chép. Tôi thực sự muốn tránh bản sao này, bất kỳ cách nào dễ dàng tôi có thể làm điều này trong C++ 11? Tôi nghĩ điều này liên quan đến điều rvalue. OK, cập nhật cho câu hỏi: Nếu tôi sẽ trả về một đối tượng được xác định bởi bản thân mình, không phải là vectơ hoặc thiết lập, điều đó có nghĩa là tôi nên định nghĩa một hàm tạo di chuyển? như sau:
class value_to_return {
value_to_return (value_to_return && other) {
// how to write it here? I think std::move is supposed to be used?
}
}
THanks !!!
Những gì bạn hiện có sẽ không tạo bản sao nào trong C++ 11. Nó có thể làm cho di chuyển, nhưng ngay cả những người gần như chắc chắn sẽ được tối ưu hóa bằng [N/RVO] (http://en.wikipedia.org/wiki/Return_value_optimization). –
"cách tránh sao chép khi tôi trở lại" - biên dịch với trình biên dịch được phát hành cách đây không quá 10 năm. –
Tôi rất cám dỗ để downvote tất cả các câu trả lời mà không đề cập đến di chuyển/rvalues. –