한 걸음씩..

[MFC] DECLARE_DYNCREATE IMPLEMENT_DYNCREATE 본문

프로그래밍

[MFC] DECLARE_DYNCREATE IMPLEMENT_DYNCREATE

반엘 2013. 10. 3. 09:30


       DECLARE_DYNCREATE IMPLEMENT_DYNCREATE 


보통 어떤 클래스를 동적으로 생성 시 new연산자를 사용하여 생성하고 delete 연산자로 메모리에서 해제한다


그러나 CObject 를 상속받는 클래스들은 생성자가 protected로 선언되어 있기 때문에 위의 방법으로 생성하고 해제 할 수 없다


생성자가 protected로 선언된 이유는 자기 스스로 파괴되는 객체에 대한 명확한 사용법을 제시하기 위함이다.

자기 스스로 파괴되는 객체의 경우 정적으로 선언하여 사용하면 메모리에서 제거되는 시도를 두 번 하기 때문이다.


스스로 파괴되는 객체의 경우 반드시 동적으로 생성하여야 하고 프로그래머가 정적으로 선언하는 실수를 방지하기 위해 protected 멤버로 선언한다.


 생성자를 protected로 선언하면 다른 클래스에서 new 나 delete로 객체를 생성 & 해제할 수 없기 때문에 이러한 생성을 도와주는 클래스가 필요하다.

CRuntimeClass를 사용하여 CMainFrame Class 생성하는 예제는 아래와 같다.


CRuntimeClass *pRuntimeClass = RUNTIME_CLASS(CMyFrameWnd); 

CMyFrameWnd *pFrame = (CMyFrameWnd*)pRuntimeClass->CreateObject();


      매크로 선언


헤더 파일과 cpp파일에 각각의 매크로를 선언한다.


       Runtime Class를 사용하여 Object 생성