Có lời khuyên trong C++: "Không bao giờ trả lại một tham chiếu đến một đối tượng địa phương", như được trích dẫn từ "C++ Primer":từ C++ đến C#: Không bao giờ trả về một tham chiếu đến một đối tượng cục bộ?
"Có một điều quan trọng quan trọng cần hiểu về việc trả về tham chiếu: Không bao giờ trả về một tham chiếu đến một biến cục bộ
"Khi một hàm hoàn thành, lưu trữ trong đó các đối tượng địa phương được cấp phát sẽ được giải phóng. Một tham chiếu đến một đối tượng cục bộ đề cập đến bộ nhớ không xác định sau khi hàm kết thúc. Hãy xem xét các chức năng sau:..
// Disaster: Function returns a reference to a local object
const string &manip(const string& s)
{
string ret = s;
// transform ret in some way
return ret; // Wrong: Returning reference to a local object!
}
"Chức năng này sẽ thất bại tại thời gian chạy vì nó trả về một tham chiếu đến một đối tượng địa phương Khi chức năng kết thúc, lưu trữ, trong đó ret cư trú được trả tự do Giá trị trả lại đề cập đến bộ nhớ không còn có sẵn cho chương trình nữa. "
Câu hỏi: điều này vẫn áp dụng cho C#? hoặc nó không quan trọng như GC được giới thiệu?
Tôi không đồng ý với "chức năng này sẽ thất bại tại thời gian chạy.". Nó * có thể * thất bại, và không an toàn. Nhưng trong nhiều trường hợp, lưu trữ sẽ có sẵn trong một thời gian sau khi trả lại, Thường làm cho loại vấn đề này khó gỡ lỗi. – abelenky
abelenky là chính xác; không có gì đảm bảo rằng bất cứ điều gì mà sẽ thất bại, bao giờ hết. Nó không phải là một yêu cầu lưu trữ được "giải phóng", bất cứ điều gì có nghĩa là. Một chương trình thực hiện điều này có thể hoạt động theo cách bạn muốn - bạn có thể gặp may mắn - hoặc, nó có thể làm cho toàn bộ hệ thống bị treo, hoặc nó có thể xóa đĩa cứng của bạn. Nó có thể làm * bất cứ điều gì *. Xem http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope/6445794#6445794 để biết thêm suy nghĩ. –