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 |