2014년 10월 29일 수요일

CBrush, CPen 은 DeleteObject를 호출하지 않아도 된다.(MFC)

MFC에서 사용하는 CBrush, CPen, CFont 등 의 GDI객체들은 CGdiObject를 상속받아 만들어졌다.



일반적으로 책에는 이 객체들을 다 사용하고 나면, DeleteObject를 호출하라고 되어있지만, 호출하지 않아도 된다.



물론 MFC니까 가능한거고, Win32에서 CBrush가 아닌 구조체를 이용한 GDI객체 생성시에는 무조건 해제해줘야 한다.



CGdiObject의 소멸자에서는 DeleteObject를 부르고 있으므로, 별도로 호출하지 말자.



물론 클래스의 멤버로서 CGdiObject의 객체를 선언해놓고 생성을 여러번 해야한다면, 클래스가 소멸할 때까지는 계속 생성할테니 메모리가 샐것이다(GDI개체가 누수될 듯). 이럴 땐 당연히 DeleteObject를 호출해줘야 한다.

댓글 없음: