ゆとりーなの日記

日記的な事を書いて行くと思はれる

コンストラクタ先生

コンストラクタはreturn出来ないことで有名です。コンストラクタは値を返せませんからね。
今日ノリでコンストラクタ内で途中リターンしたくなったので試しに書いてみました。コンパイル通りました。そこで気になるのがデストラクタの呼び出しです。コンストラクタで例外が投げられるとデストラクタは呼ばれません。途中リターンでは果たして・・・。
お試しコード

#include <iostream>

class A {
public:
  A() {
	std::cout << "コンストラクタ呼び出し" << std::endl;
  }
  ~A() {
	std::cout << "デストラクタ呼び出し" << std::endl;
	}
};

class B {
public:
  B() {
	return;
	std::cout << "この文字は表示されない" << std::endl;
  }
  ~B() {
	std::cout << "デストラクタ呼び出し" << std::endl;
  }
};

int main() {
  A a;
  B b;
  return 0;
}

出力
コンストラクタ呼び出し
デストラクタ呼び出し
デストラクタ呼び出し

VC++2008EEでの結果です。デストラクタは普通に呼ばれましたとさ。