1

ここの誰かがファイルスコープで次のように書いています:

std::auto_ptr<ClassWithDestructor> an_auto_ptr;

彼らそれを追加するつもりstaticでしたが、それを無視しました。

次に、それぞれがこの宣言を含む.oを含む2つの異なるLinux共有ライブラリが、実行可能ファイルにリンクされることになりました。

このアイテムのauto_ptr::~auto_ptrforは2回実行され、残念な結果になりました。

これは定義された動作、未定義の動作、またはgcc + ldのバグですか?

4

1 に答える 1

1

この宣言も定義です。プログラム内の同じオブジェクトに対して2つの定義があります。これは、単一定義規則の違反であり、したがって未定義動作です。

于 2013-01-22T19:35:09.550 に答える