桜、抹茶、白、日記

名古屋市在住のC++使いのcoderの日記だったもの。

僕、うっかり、ゴメン

他人の書いた面白コード。

#include <stdio.h>

class CTorTest
{
	int	m_nValue;
public:
	CTorTest() : m_nValue( -1 ) { CTorTest( 5 ); }
	CTorTest( int nValue ) : m_nValue( nValue ) { Dump(); }
	void Init() { CTorTest( 10 ); }
	void Dump() const { fprintf( stdout, "this=%p, VALUE:%d\n", this, m_nValue ); }
};

int main(int argc, char* argv[])
{
	CTorTest test;
	test.Dump();
	test.Init();
	test.Dump();

	fprintf( stdout, "Press Any Key..." ); (void)fgetc( stdin );
	return 0;
}

実行結果orz

this=0012FF20, VALUE:5
this=0012FF7C, VALUE:-1
this=0012FF20, VALUE:10
this=0012FF7C, VALUE:-1

最初このコードを見た時、こんな事できんのかよってチビリそうになったんだけど、やっぱり駄目だよね。名前なしの一時オブジェクトを作っているだけ。
C++ランゲージクイックリファレンス で確認したけどコンストラクタが呼び出されるのは以下の5つ。

    1. 静的なインスタンスの宣言
    2. 動的なインスタンスの宣言
    3. 継承した際のコンストラクタの初期化リスト
    4. 関数の引数での一時オブジェクトの宣言
    5. 関数の戻り値