インスタンスを関数の戻り値にしたい
#includeusing namespace std; class A { public: A() { cout << "A::A()" << endl; } virtual ~A() { cout << "A::~A()" << endl; } }; A foo() { cout << "b" << endl; A a; cout << "c" << endl; return a; } void main() { cout << "a" << endl; A a = foo(); cout << "d" << endl; }
の実行結果は
a b A::A() c A::~A() d A::~A()
なぜデストラクターの呼び出し数が2回でコンスタクターの呼び出し数が1回なのか?
... http://wisdom.sakura.ne.jp/programming/cpp/cpp12.html に分かりやすい説明があった。関数へ引数を渡す時や、関数から戻り値を返すときは、インスタンスのコピーは作られるが、コンストラクターは呼ばれないという決まりらしい。もっとも、デストラクターはこれにかかわらず呼ばれる。