기존 방식으로 인터페이스의 사용이 번거롭게 느껴질 것이다. 조금 편하게 인터페이스를 사용할 수 없을까?

 

여기 한 가지 방법이 있다. 스마트 포인터 클래스를 활용하는 것이다.

 

스마트 포인터 클래스란 말 그대로 아주 영리하게 인터페이스 포인터를 관리하는 클래스를 말한다.

 

우리는 다음과 같이 CSmartPtr이란 템플릿 클래스를 정의할 수 있다.

 

template <class I>

class CSmartPtr

{

public:

          //생성자

          CSmartPtr(I* pl = NULL) : m_pl(pl)

          {

                      if (m_pl != NULL)

                                 m_pl->AddRef();

          }

 

          //복사생성자

          CSmartPtr(const CSmartPtr<I>& rl) : m_pl(rl.m_pl)

          {

                      if (m_pl != NULL)

                                 m_pl->AddRef();

           }

 

           //소멸자

           ~CSmartPtr()

          {

                       if (m_pl != NULL)

                                 m_pl->Release();

          }

      

           //대입연산자

         CSmartPtr<I>& operator=(I* pl)

         {

                       if(m_pl != pl)

                       {

                                  if(m_pl != NULL)

                                             m_pl->Release();

                                  m_pl = pl;

                                  if(m_pl != NULL)

                                             m_pl->AddRef();

                       }

                       return *this;

          }

 

          //변환연산자

          operator I*()

          {

                       return m_pl;

          }

         

          I* operator->()

          {

                       return m_pl;

          }

 

          I* operator&()

          {

                       return &m_pl;

          }

 

          BOOL operator==(I* pl) const

          {

                       return (m_pl == pl);

          }

 

          BOOL operator!=(I* pl) const

          {

                       return (m+pl != pl);

          }

 

          BOOL operator!() const

          {

                       return !m_pl;

          }

protected:

           I* m_pl;

};

'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
Posted by ... XJAPAN

댓글을 달아 주세요