Tại sao điều này:
#include <string>
#include <iostream>
using namespace std;
class Sandbox
{
public:
Sandbox(const string& n) : member(n) {}
const string& member;
};
int main()
{
Sandbox sandbox(string("four"));
cout << "The answer is: " << sandbox.member << endl;
return 0;
}
Cho đầu ra của:
Câu trả lời là:
Thay vì:
Câu trả lời là: bốn
SandBox::member
được đọc, chuỗi tạm thời vẫn còn sống .
string("four")
bị hủy ở cuối biểu thức đầy đủ mà không phải sau khi hàm Sandbox
tạo thoát ra không? Câu trả lời của Potatoswatter cho biết Một ràng buộc tạm thời với một thành viên tham chiếu trong trình khởi tạo ctor của trình xây dựng (§12.6.2 [class.base.init]) vẫn tồn tại cho đến khi hàm tạo thoát ra.
cout << "The answer is: " << Sandbox(string("four")).member << endl;
, thì nó sẽ được đảm bảo để làm việc.