다른 스레드에서 묻는 a question의 질문에 새로운 질문이 생겼습니다. 그 대답은 분명하지 않습니다.변수의 수명과 수명
그래서 임시 참조를 가지고 있다면 적어도 임시 참조의 수명은 const 참조와 같다고 말하는 C++ 규칙이있는 것으로 보입니다. 하지만 다른 객체의 멤버 변수에 대한 로컬 const 참조가있는 경우와 범위를 벗어날 경우 어떻게 될까요?이 변수의 소멸자를 호출합니까? 그래서 여기
은 원래의 질문에서 프로그램을 수정 :이 코드를 실행하면#include <iostream>
#include <string>
using namespace std;
class A {
public:
A(std::string l) { k = l; };
std::string get() const { return k; };
std::string k;
};
class B {
public:
B(A a) : a(a) {}
void b() { cout << a.get(); } //Has a member function
A a;
};
void f(const A& a)
{ //Gets a reference to the member function creates a const reference
stores it and goes out of scope
const A& temp = a;
cout << "Within f(): " << temp.k << "\n";
}
int main() {
B b(A("hey"));
cout << "Before f(): " << b.a<< "\n";
f(b.a);
cout << "After f(): " << b.a.k << "\n";
return 0;
}
그래서, 내가 "안녕"값 매번 같은 수. 어느 지역의 const 레퍼런스가 구성원 개체에 전달 된 삶을 통해 스스로 바인딩되지 않는다는 것을 암시하는 것처럼 보입니다. 왜 안 그래?
그래서'temp '가 범위를 벗어날 때'b.a'의 소멸자가 호출되기를 기대합니까? 그래서 b는 파괴 된 회원을 포함 할 것인가? – Henrik
당신은 무엇을 기대합니까? 나는 b.a가 바뀔 이유가 보이지 않습니다. – Cosyn
http://stackoverflow.com/questions/3097593/what-happens-when-c-reference-leaves-its-scope – EdChum