Một vấn đề cho lợi nhuận tham chiếu const sẽ là nếu người dùng mã hóa một cái gì đó như:
const std::string & str = myObject.getSomeString() ;
Với sự std::string
trở lại, đối tượng tạm thời sẽ vẫn còn sống và gắn liền với str cho đến khi str vượt quá phạm vi.
Nhưng chuyện gì xảy ra với a const std::string &
? Tôi đoán là chúng ta sẽ có một tham chiếu const đến một đối tượng có thể chết khi đối tượng mẹ của nó giải phóng nó:
MyObject * myObject = new MyObject("My String") ;
const std::string & str = myObject->getSomeString() ;
delete myObject ;
// Use str... which references a destroyed object.
Vì vậy, sở thích của tôi là trả về tham chiếu const (bởi vì, dù sao, tôi chỉ dễ dàng gửi được tham chiếu hơn là hy vọng trình biên dịch sẽ tối ưu hóa thêm tạm thời), miễn là hợp đồng sau được tôn trọng: "nếu bạn muốn nó vượt quá Sự tồn tại của đối tượng của tôi, họ sao chép nó trước khi phá hủy đối tượng của tôi "