기존의 매크로 버전을 탈피(?)하고 새로 만들어본 인라인 함수 버전입니다.

[code]
// 기존 코드
#define SAFE_DELETE(x)    { delete(x); (x)=NULL; }
#define SAFE_RELEASE(x)    { if (x) { (x)->Release(); (x)=NULL; }
[/code]

[code]
// SAFE_DELETE -> SafeDelete
template <class T>
inline void SafeDelete(T& Object)
{
    void *pTemp = Object;
    Object = NULL;
    delete pTemp;
}
[/code]

[code]
// SAFE_RELEASE -> SafeRelease
template <class T>
inline void SafeRelease(T& Interface)
{
    IUnknown *pTemp = Interface;
    Interface = NULL;
    if (pTemp)
        pTemp->Release();
}
[/code]

왠지 좋군요.
오늘부터 저는 이렇게 해서 써야겠습니다. -_-;

릴리즈 모드로 최적화를 활성화하면 매크로와 별 차이 없는 코드를 만들어줍니다.

하지만 최소한 매크로 버전보다 다음과 같은 장점이 있습니다.
1. 매크로 사용으로 나타날 수 있는 미묘한 문제 없음.
2. 형 안전성 쪼금 지원 - 각 함수에서 Temp에 대입되는 과정에서, 포인터가 아니거나 IUnknown의 후손 인터페이스가 아닌 경우를 인자로 넣으면 컴파일러 오류 발생.
3. 참조 변수를 먼저 NULL로 만들고 제거하기 때문에 스레드 안전선 향상(?).

*스마트 포인터를 쓰면 별로 쓸 일이 없을지도?