EC++ 4. const의 사용 - 수정중

반응형

프로그래머로서 중요한 습관중 하나가 변수의 초기화라고 생각한다.
옜날부터 변수초기화 때문에 많은 삽질을 했었다.
그래서 언제부턴가 생성자나 Begin()함수나 Initialize()함수등을 둬서
모든 변수를 초기화 하는 습관을 가지게 되었다.

MgSceneManager::MgSceneManager(void)
{
 m_pCamera  = NULL;
 m_pDxInput  = NULL;
 m_pFps   = NULL;

 D3DXMatrixIdentity(&m_matWorld);
 D3DXMatrixIdentity(&m_matView);
 D3DXMatrixIdentity(&m_matProj);
 D3DXMatrixIdentity(&m_matOrth);

 // test
 m_TeshEntity = NULL;
 m_pFontInstance = NULL;
}

위 처럼 변수들을 모두 초기화 한다.
그런데 여기서 이 초기화라는 단어에 의구심을 품을 필요가 있다.
내가 여태까지 초기화라고 생각하고 해왔던 것들이 사실 대입이라는 사실을 깨달았다.

물론 위와 같이 하면 내가 의도한 대로 행동은 하게 될 것이다.
하지만 C++규칙에 따르면 어떤 객체이든 그 객체의 데이터 멤버는 생성자의 본문이
실행되기 이전에 초기화
가 되어야 한다고 명시되어 있다.


MgSceneManager::MgSceneManager(void) : m_pCamera(NULL), m_pDxInput(NULL), m_pFps(NULL)  <- 이게 초기화
{
 D3DXMatrixIdentity(&m_matWorld);                               <- 여기서부터는 대입
 D3DXMatrixIdentity(&m_matView);
 D3DXMatrixIdentity(&m_matProj);
 D3DXMatrixIdentity(&m_matOrth);

 // test
 m_TeshEntity = NULL;
 m_pFontInstance = NULL;
}

지금보니 대입과 초기화의 차이가 명백하다.
초기화를 사용하는것은 대입을 사용하는 것보다 효율적이다.
각 멤버변수가 각자의 기본 생성자를 호출해서 초기화를 미리 해 놓은 후에 생성자에서 다시
곧바로 새로운 값으로 대입하기 떄문에 이전 초기화한 값은 의미없는 짓이 되는 것이다.

'Study > C++' 카테고리의 다른 글

DllMain 사용, DllMainCRTStartup , DllMain , fdwReason , DLL_PROCESS_ATTACH , DLL_PROCESS_DETACH  (0) 2010.01.10
3d좌표 2d좌표로 변환  (0) 2009.09.02
EC++ 3. const의 사용  (0) 2009.08.28
pragma 정리  (0) 2009.08.01
About Interlocked  (0) 2009.08.01
TAGS.

Comments