생성자 2

protected 속성으로 런타임클래스를 사용해라?....고찰

mfc는 클래스마법사로 새로운 클래스를 생성시 기본적으로 protected로 생성자를 막아 놓는다. 대신 DECLARE_DYNCREATE - IMPLEMENT_DYNCREATE 매크로를 통해 런타임 다이나믹 크리에이션을 제공한다. 그래서 원칙적으로 아래와 같은 식으로 사용하도록 한다. m_pSwordView = (CSwordView*)(RUNTIME_CLASS(CSwordView)->CreateObject()); 그런데 이것은 좀 귀찮긴 하다. 그래서 보통 public으로 생성자를 선언하고 다음과 같이 사용한다 m_pSwordView = new CSwordView; 훨씬 간단하다...굳이 왜 저리 막아놨는지 모르겠다. 많은 사람들이 저리 사용하는데....다음 버전에서는 public으로 제발 좀 바꿔라....

MFC 2008.09.05

논리상 생성자에서 처리해도 되는 것을 Init 함수를 따로 빼서 사용하는 이유

생성자는 리턴값을 따로 두지 않는다. 에러를 조사하고자 하는 경우는 리턴값으로 확인할 수 없다. 그래서 초기화 함수를 따로 빼서 코딩해야하는 경우가 있다. 컴포넌트 관련 코딩에서 많이 발견된다. 물론 객체 생성후 항상 Init함수를 호출해준다. 다음은 그 예이다. // 생성자 COEnumConnections::COEnumConnections( IUnknown* pHostObj) { // Zero the COM object's reference count. m_cRefs = 0; // Assign the Host Object pointer. m_pHostObj = pHostObj; // Initialize the Connection Point enumerator variables. m_iEnumIndex ..

C, C++ 문법 2008.08.27