다음코드의 차이점은???

아래 나오는 A 와 B의 차이점은 뭘까요?

/// A
int _tmain(int argc, _TCHAR* argv[])
{
 NiInit();
 NiStream kStream;
 NiShutdown();
 return 0;
}


/// B
int _tmain(int argc, _TCHAR* argv[])
{
NiInit();
{
      NiStream kStream;
}
 NiShutdown();
 return 0;
}


결과를 말하자면
A는 정상종료를 하지 못합니다.
B는 정상종료됩니다.


대체 원인이 무엇인지 궁금해서 코드를 분석해봤습니다.

일단 분석결과는 NiStream 의 scope 문제 입니다.

GameBryo는 필요한 변수의 초기화및 할당 NiInit() 에서 합니다.
NiShutdown 을 통해서 모두 해제하구요.
NiShutdown 내부에는 스마트 포인터에 관련된 해제 처리도 포함되어있습니다.

그러다 보니 스마트 포인터 관련 처리가 정상 작동이 되려면
NiShutdown 호출 이전에 모두 마무리 되어야 하는것입니다.

헌데 NiStream 은 내부에 스마트 포인터를 멤버변수로 갖고 있습니다.

case A에서는 NiStream 의 소멸자가 호출 되긴 하는데

_tmain 을 벗어나야 호출이 되지요.

NiShutdown 호출  이후에 스마트 포인터 관련 처리를 하려고 하여 문제가 생겼던 것입니다.

-- 결론 --

게임브리오는 프로그래머블한 엔진. 자잘하게 신경써야할것이 많음.






by jungmoona | 2009/05/14 10:44 | GameBryo | 트랙백 | 덧글(0)

트랙백 주소 : http://jungmoona.egloos.com/tb/4945186
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶