僕、うっかり、ゴメン
他人の書いた面白コード。
#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つ。