9

Herb Sutter のブログでこの記事を読んだ後、少し実験してみたところ、私を困惑させる何かに出くわしました。私は Visual C++ 2005 を使用していますが、これが実装に依存しているとしたら驚きです。

これが私のコードです:

#include <iostream>

using namespace std;

struct Base {
    //Base() {}
    ~Base() { cout << "~Base()" << endl; }
};

int main()
{
    const Base & f = Base();
}

実行すると、「~Base()」が2回表示されます...しかし、コンストラクターのコメントを外すと、1回だけ表示されます!

誰もこれについて説明がありますか?

4

1 に答える 1

24

これは実装依存です。

標準では、一時を const 参照にバインドするときにコピーが発生することが許可されています。あなたの場合、コンストラクターが暗黙的に定義されている場合にのみ、VC++ はコピーを実行します。これは予期しないことですが、許可されています。

C++1xはこれを修正します。

于 2009-04-17T14:15:57.937 に答える