Vì vậy, tôi đã viết một số mã, và tôi đã có một cái gì đó như thế này:Có cách nào đúng để trả về một cá thể đối tượng mới bằng cách tham chiếu trong C++ không?
class Box
{
private:
float x, y, w, h;
public:
//...
Rectangle & GetRect(void) const
{
return Rectangle(x, y, w, h);
}
};
Rồi sau này trong một số mã:
Rectangle rect = theBox.GetRect();
nào làm việc trong debug build của tôi, nhưng trong phiên bản đã có "vấn đề "trả về hình chữ nhật đó bằng cách tham khảo - về cơ bản tôi có hình chữ nhật không được khởi tạo. Lớp Rectangle có toán tử = và một hàm tạo bản sao. Mà không nhận được vào lý do tại sao điều này đã phá vỡ, tôi thực sự quan tâm nhiều hơn trong cách chính xác để trả lại một đối tượng (mới) bằng cách tham khảo với mục đích gán sao chép vào một biến. Tôi chỉ là ngớ ngẩn? Nếu nó không được thực hiện? Tôi biết tôi có thể trở lại một con trỏ và sau đó dereference về chuyển nhượng, nhưng tôi không muốn. Một số phần của tôi cảm thấy như trở về bởi giá trị sẽ dẫn đến sao chép dự phòng của đối tượng - không phải là con số biên dịch ra và tối ưu hóa nó?
Dường như đây là một câu hỏi nhỏ. Tôi cảm thấy gần như xấu hổ Tôi không biết điều này sau nhiều năm mã hóa C++ vì vậy hy vọng ai đó có thể xóa điều này cho tôi. :)
Lưu ý rằng không có chuyển nhượng trong mã của bạn. –