MSVC に関する次の 3 つのコードの違いは何ですか?
コード 1: 次のように定義された Foo ctor:
Foo::Foo(Bar &bar = Bar());
次のように使用されるフッター:
Foo foo = new Foo();
コード 2: 次のように定義された Foo ctor:
Foo::Foo()
{
Bar bar = Bar();
Foo(bar);
}
Foo::Foo(Bar &bar);
次のように使用されるフッター:
Foo foo = new foo();
コード 3: 次のように定義された Foo ctor:
Foo::Foo(Bar &bar);
次のように使用されるフッター:
Bar bar = Bar();
Foo foo = new foo(bar);
編集: コードに修正を加えました。意図はアイデアを説明することでしたが、コードに焦点を合わせていなかったため、間違いを犯しました。申し訳ありません。
具体的な問題は、コード 2 と 3 の違いを理解することです。何らかの理由により、コード 2 の場合、Foo クラス ctor のコンシューマがクラッシュし、コード 3 の場合はクラッシュしません。私は消費者の特定のコードを持っていないので、自分でそれを理解することはできません.