개발/C/C++(10)
-
[C/C++]자주 하는 실수
프로그램을 하다 스스로 자주 실수하게 되는 코딩 스타일이 있습니다. 얼마전에 제가 자주 겪는 함정에 빠졌는데요. 관련 코드를 축약하면 아래와 같습니다. CMyClass* pMy = NULL; // 클래스 생성을 함수를 통해 대행 CreateMyClass(pMy); // 아래 함수 호출하면 Crash!! pMy->DoSomeghing(); // 잘못 만들어 진 함수 void CreateMyClass(CMyClass* pMy);) { pMy = new CMyClass; ASSERT(pMy); } CreateMyClass() 라는 함수를 통해 CMyClass 의 생성을 대행하는 것이 목적이었는데, 주석으로 보이는 것과 같이 프로그램이 쉽게 죽어버렸습니다. 이상하게, 포인터를 가지고 작업하다 보면 이와 같은 실..
2008.10.22 -
[C++]소멸자에서 가상함수 호출하기
소멸자에서 가상함수 호출하기 시도 요즘은 거의 코딩할일이 없다보니 블로그에 개발 관련 글을 포스팅할 기회조차 없네요 개발자라는 타이틀은 이제 빼야 할 때가 왔나 봅니다. ㅎㅎ 지난번 포스팅에서 간단하게 포인터를 Wrapping 하는 템플릿을 소개한적이 있습니다. [C++]포인터 Wrapping 클래스 만들기 나름 쓸모 있어서 요긴하게 사용하고 있는데요. 사용을 하다 보니 이 템플릿의 변종들이 필요하게 되었습니다. 지난번에 만든 포인트를 감싸는 템플릿 코드는 아래와 같습니다. template class IMyAutoPtr { public: IMyAutoPtr(){m_pPtr = NULL;} ~IMyAutoPtr() { if (m_pPtr) m_pPtr->Release(); m_pPtr = NULL; } T..
2008.10.08 -
[C++]포인터 Wrapping 클래스 만들기
요즘 회사 내에서 기존에 만들어진 컨트롤들을 새로 만들어 진 컨트롤로 변경하는 작업을 계속 진행 중입니다. 새로 만들어진 콘트롤들은 인터페이스 기반으로 만들어 져 있고 인터페이스는 조금씩 틀리지만 대부분 아래와 같은 선언과 생성, 리소스 반환 방식을 채택하고 있습니다. 1. 선언 IXXControlA* m_pControl; 2. 생성 m_pControl = NULL; m_pControl = GetControlA(); 3. 종료 함수 if (m_pControl) m_pControl->Release(); 와 같은 방식으로 사용하고 있습니다. 컨트롤들의 종료는 수십 가지이지만, 컨트롤을 생성하는 방식과, 모두 다 사용한 후 리소스를 반환하는 방식(->Release() 호출) 은 모두 동일합니다. 새로 만들어진..
2008.09.09 -
[C/C++] enum, 보다 나은 enum
#define 과 얼핏 비슷해 보이지만, 비슷한 유형별의 데이터를 표현하기 위해 반드시 필요한 C++의 필수 타입인 enum 의 몇 가지 재미있고 유용한 팁을 소개합니다. 1. namespace 와 결합하기 일반적으로 enum 을 이용하여 타입이름을 짓기란 쉬운 일이 아닙니다. 만약 리스트에 필요한 정렬 기준을 enum 으로 표현한다면 아래 정도가 됩니다. enum SORT_LIST{ SORT_DATE, // 날짜순 SORT_NAME, // 이름 SORT_CONTENT, // 내용 S0RT_ETC, // 기타}; bool SortSomeData(SORT_LIST SortList){ switch (SortList) { case SORT_DATE: break; case S0RT_NAME: break; // ..
2008.07.21 -
싱글톤 클래스
어플리케이션을 개발하다 보면 어플리케이션 전역으로 쓰이는 필수 클래스가 있게 마련입니다. 이런 클래스들은 그 특성상 하나의 인스턴스만 생성되어야 하고, 시스템 전역에서 사용하다 보니 이 클래스의 코드 수정으로 인한 시스템에 걸쳐 있는 다른 프로그램들의 수정이 최소화되도록 설계되는 게 보통입니다. 하나의 인스턴스만 생성되어야 하는 클래스를 보통 싱글톤 클래스라고 부르는데요, 요즘은 패턴관련 책들이 워낙 많아 싱글톤 패턴들은 이미 머리 속에 콕 하고 들어 있을 겁니다. 싱글톤 클래스를 만드는 방법 중에 제가 자주(늘~) 사용하는 방법은 패턴 책에 구현된 코드가 아닌 “More Effective C++” 책에 소개된 방법입니다. class Printer { public: void SubmitPrint(); ...
2008.07.01 -
[C++]STL Container 조합하기
STL 에서 하나의 Container를 선택하는 방법은 간단합니다. vector – 맨 뒤에만 추가할 경우 순차 검색에 유리 dequeue – 앞 뒤로 추가할 경우 및 순차 검색에 유리 map – 검색이 필요할 경우 유리 list – 데이터의 삽입과 삭제가 빈번할 경우 유리 … 와 같은 식으로 간단하게 선택할 수 있습니다. 하지만, 가끔가다 보면 위에 Container 의 특징을 하나 이상 만족해야 할 경우가 있습니다. 특히 검색도 빨라야 하면서, 초기에 주어진 순서를 그대로 유지해야 하는 경우가 그렇습니다.간단하게 생각하면 map 와 vector 를 같이 사용하면 되지 않나 싶은데요 몇 가지 고려해야 할 경우가 있습니다. 우선 설명을 더 진행하기 전에 예제에서 사용할 간단한 더미 구조체를 하나 선언하겠..
2007.11.12