Tôi đã có một cơ bản C++ câu hỏi khá, hãy xem xét một hàm mang theo một số thông số đầu vào và tạo ra một std::string
rằng từ những thông số như hình dưới đây:C++ trở về đối tượng tạm thời nhầm lẫn
std::string constructString(int some_parameter) {
std::stringstream ss;
// Construct a string (arbitrarily complex)
ss << "Some parameter is " << some_parameter << " right now";
return ss.str(); //Am I not returning a temporary object here?
}
Tôi hiểu rằng stringstream-object sẽ đi ra khỏi phạm vi khi hàm trả về, nhưng nó không làm mất hiệu lực chuỗi được xây dựng?
Điều gì sẽ xảy ra nếu tôi thay đổi loại trả về thành const char *
và trả lại ss.str().c_str()
thay thế?
Mã như trên dường như làm việc, nhưng tôi nghi ngờ đó chỉ là vì bộ nhớ có chứa các đối tượng 'tạm thời' vẫn chưa được ghi đè bằng cái gì khác khi tôi sử dụng nó?
Tôi phải thừa nhận, tôi khá bối rối trong những tình huống như vậy nói chung, tôi đánh giá cao nếu ai đó có thể giải thích toàn bộ "đối tượng tạm thời" này cho tôi (hoặc chỉ cho tôi đi đúng hướng).
thx trước
Sẽ là destructor được gọi là sau khi bản sao này sẽ không được chọn bằng cách gọi hàm constructString? Vì nó là đối tượng tạm thời, tôi giả sử con trỏ đến nó được giữ trên stack như một giá trị trả về. Điều gì sẽ xảy ra sau khi nó được trả lại? Nó bị phá hủy nếu không có chủ sở hữu đối tượng mới? Làm thế nào trình biên dịch biết rằng đối tượng phải được tiêu huỷ hay không sau khi nó được trả về? –