このプレゼンテーションを見て、スライド 379 に次のコードを示します (いくつかの小さな変更があります)。
#include <iostream>
using namespace std;
struct A
{
A() { cout << "A()" << endl; }
A(int v) { cout << "A(int)" << endl; }
~A() { cout << "~A()" << endl; }
};
struct X
{
X(int v) { a = v; }
X(long v) : a(v) {}
A a;
};
int main()
{
cout << "bad style:" << endl;
{ X slow(int(2)); }
cout << "good style:" << endl;
{ X fast(long(2)); }
}
出力は次のとおりです。
bad style:
A()
A(int)
~A()
~A()
good style:
A(int)
~A()
(このコードは私のマシンで実行され、g++ でコンパイルされました)
これで、悪いスタイルでコンストラクタが 2 回呼び出される理由がわかりましたが、デストラクタはなぜそうするのでしょうか。