이제 우리는 CSmartPtr 템플릿 클래스를 사용하여 다음과 같이 클라이언트 코드를 작성할 수 있다.
void Foo(IUnknown* pUnk)
{
HRESULT hr;
CSmartPtr<IHello> plHello;
hr = pUnk->QueryInterface(IID_IHello, (void**)&plHello);
//이미 참조 카운터가 증가되었으므로
//이 시점에서 참조 카운터의 값은 1이다.
if(hr != S_OK)
{
return;
}
plHello->sayHello(...);
CSmartPtr<IHello> plHello2;
plHello2 = plHello; //참조 카운터 == 2
//plHello2 인스턴스의 operator=() 함수에서 자동으로 AddRef() 메서드를 호출하여
//참조카운터를 증가시키므로, AddRef() 메서드를 호출할 필요가 없다.
plHello2->sayHello(...);
plHello2 인스턴스의 SmartPtr 클래스 소멸자에서 자동으로 Release() 메서드를 호출하여 참조 카운터를 감소시키므로(참조 카운터 == 1)
Release() 메서드를 호출할 필요가 없다.
plHello 인스턴스의 SmartPtr 클래스 소멸자에서 자동으로 Release() 메서드를 호출하여 참조 카운터를 감소시키므로(참조 카운터 == 0)
Release() 메서드를 호출할 필요가 없다. 이 시점에서 Hello COM 객체는 소멸된다.
'COMPUTER TECH > COM' 카테고리의 다른 글
스마트 포인터 클래스 - 2 (0) | 2010.08.12 |
---|---|
스마트 포인터 클래스 - 1 (0) | 2010.08.12 |
문자열을 변환해주는 API 함수 (0) | 2010.08.12 |
COM에서의 문자열 사용 (0) | 2010.08.12 |
CLSIDFromProgID 함수 (0) | 2010.08.12 |
HRESULT 에 대한 내용 (0) | 2010.08.12 |
댓글을 달아 주세요