Đây là vấn đề của tôi. Tôi có chức năng lấy struct
làm đầu vào, phân bổ struct
mới và sau đó trả về. struct
có các nội dung sauTrả về một đối tượng struct lớn theo giá trị hoặc con trỏ tới phân bổ động trên C++
struct Data {
std::vector<custom_type> vector_vars;
std::string key;
std::map<std::string, Data*> index;
};
vector_vars
có kích thước 500-1000. custom_type nếu có liên quan là this class. index
giúp tôi truy cập khác nhau Data
struct theo key
. Đây là hàm.
Data func(Data inputData) {
Data outputData;
//compare values with inputData
//change some values in Data struct
return outputData
}
Tôi có sử dụng phân bổ chồng và gửi lại để nó được sao chép vào RHS. Điều này có được khuyến khích vì việc sao chép có thể tạo ra rất nhiều chi phí không?
Tôi có thể trả lại tham chiếu/con trỏ tới cấu trúc được phân bổ trên ngăn xếp trong một hàm không?
Bạn nên sử dụng phân bổ động thay vì ở đây (có thể với
std::shared_ptr
) để có hiệu quả?
Bạn có cần 'outputData' khác với' inputData' không? Nếu có, hãy phân bổ trên ngăn xếp và trả về theo giá trị. – juanchopanza
2 chắc chắn là không hợp lệ. Bạn có thể đo lường cách thức 1 và 3 thực hiện cho dữ liệu cụ thể của bạn và quyết định cho chính mình, đặt cược của tôi là ngày trở lại theo giá trị (trình biên dịch sẽ tối ưu hóa việc sao chép). Có lẽ bạn nên vượt qua đối số hàm bằng tham chiếu. –
'1' thường là chính xác; tất cả các trình biên dịch hiện đại thực hiện RVO, và trong C++ 11 ngay cả khi RVO không thể, giá trị trả về sẽ được di chuyển. – ecatmur