Trong C ++ truyền thống, việc truyền giá trị vào các hàm và phương thức là chậm đối với các đối tượng lớn và thường được tán thành. Thay vào đó, các lập trình viên C ++ có xu hướng chuyển các tham chiếu xung quanh, nhanh hơn, nhưng đưa ra tất cả các loại câu hỏi phức tạp xung quanh quyền sở hữu và đặc biệt là về quản lý bộ nhớ (trong trường hợp đối tượng được phân bổ heap)
Bây giờ, trong C ++ 11, chúng ta có các tham chiếu Rvalue và di chuyển các hàm tạo, điều đó có nghĩa là có thể thực hiện một đối tượng lớn (như một std::vector
) giá rẻ để truyền giá trị vào và ra khỏi hàm.
Vì vậy, điều này có nghĩa là mặc định sẽ được truyền theo giá trị cho các thể hiện của các loại như std::vector
và std::string
? Còn đối với các đối tượng tùy chỉnh thì sao? Thực hành mới tốt nhất là gì?
const std::string&
và không phải là một bản sao. Chuỗi đầu tiên sau đó đã thoát ...
pass by reference ... which introduces all sorts of complicated questions around ownership and especially around memory management (in the event that the object is heap-allocated)
. Tôi không hiểu làm thế nào nó phức tạp hoặc có vấn đề cho quyền sở hữu? Tôi có thể bỏ lỡ điều gì không?