したがって、a questionから別のスレッドで尋ねられましたが、私は新しい質問を考えましたが、答えは私には分かりません。変数の定数とその有効期間
これは、一時的なconst参照がある場合、一時的なものの寿命は少なくとも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