// Example program
#include <iostream>
#include <string>
struct foo
{
int d_member;
foo(const int & in):
d_member(in){};
};
int main()
{
foo *p;
{
int temp = 5;
p = new foo(temp);
}
std::cout << p->d_member << std::endl;
return 0;
}
Fooはconst refをintに渡し、一時的なintを渡します。新しい後に 一時は破棄されます。なぜ私はまだd_memberを印刷できるのですか?なぜtemp変数をctor workのconst refに渡すのですか?
それを'const'もなくても動作します。 – juanchopanza
コンストラクタ呼び出しを超えて参照を保持していないためです。 –
'd_member'を' const int&d_member; '、* then *に変更すると、' d_member'も 'temp'に束縛され、' temp'がなくなるので問題があります。ほとんどのコンパイラでスタックがどのように動作するかによって、動作は変わらないでしょうが、標準では 'p-> d_member'を評価しようとするときに何が起こるのかを規定していません。その時点で、プログラムは技術的に*未定義の動作*を持ち、(1)クラッシュ、(2)あなたが望むやり方、(3)なんかなど何かをすることができます。 – cdhowie