http://blog.naver.com/kkss2013/60108816896




gpg study를 돌아다니다가 우연히 보게 된 기법..

클래스의 헤더에 변수는 내부에서만 사용하는 변수가 많은데

그것들을 외부로 보여지지 않게 하는 기법이 있어서 잠깐 구현방법을 확인해봤습니다.

 

우선 장점을 보면

: 클래스의 내부 변수를 외부에서 접근 및 확인 하기 어렵다.

: 내부 변수를 추가할때 헤더 파일에 추가하지 않아도 된다.(다른 헤더를 빌드할 필요가 없다!!)

 

단점은

 : 내부변수를 new로 생성해야 하기 때문에 속도상의 문제가 조금있지 않을까 싶기도 하네요 ..

 : 인라인 함수를 만들 수 없다는점도 .....

 

구현방법을 간단히 보면

 

 // 헤더 파일

 

#pragma once


class CPimpl

{

public:

 CPimpl(void);

 ~CPimpl(void);

protected:

 struct XImpl;  // 맴버변수의 구조체 전방선언

 XImpl* pimpl_;  // 맴버변수의 포인터

public:

 int GetType();

};

 

 

 


 

// cpp 파일

#include "Pimpl.h"

// 맴버 변수는 여기에 추가 합니다.

struct CPimpl::XImpl 

{

 int m_nType;

 // 초기화 코드 추가

 XImpl()

 {

  m_nType = 0;

 }

};


CPimpl::CPimpl(void)

{

 pimpl_ = new XImpl;

}

CPimpl::~CPimpl(void)

{

 delete pimpl_;

}

int CPimpl::GetType()

{

 pimpl_->m_nType = 10;

 return pimpl_->m_nType;

}


 

반응형

+ Recent posts