12
C++ 03の12.2.5節では、 ""コンストラクタが終了するまで、 コンストラクタのctor-initializer(12.6.2)内の参照メンバへの一時バインドが続きます。は「
は、だから私は、次のプログラムc'torイニシャライザリストのconst参照への一時バインディング
#include<iostream>
using namespace std;
struct foo
{
foo()
{
cout<<"foo c'tor"<<endl;
}
~foo()
{
cout<<"foo d'tor"<<endl;
}
};
struct bar
{
const foo &ref;
bar():ref(foo())
{
cout<<"bar c'tor"<<endl;
}
};
int main()
{
bar obj;
}
を試した私が手出力は次のようになります。
foo c'tor
foo d'tor
bar c'tor
今の標準によると、FOO(によって生成された一時的な)c'tor iniファイルでバーの番号のリストはバーの後に破棄されるのでfoo d'tor
はbar c'tor
の後に印刷する必要がありますが、それは逆です。
理由を説明してください。
コンストラクタ内で 'ref'を参照するとどうなりますか?おそらく実際には使用されていないので、コンパイラは以前にそれを破壊する可能性があると判断します。 –
VS2008は 'foo、bar、foo'出力を生成します。ここでgcc 4.3.4は' foo、foo、bar'出力を生成します。面白い... – Naveen
g ++バグ、レポート。 –