더북(TheBook)

4.2.2 비트맵 생성과 소멸

IppDib 클래스는 내부적으로 DIB 구조를 저장하기 위해 메모리를 동적 할당하여 사용한다. 영상을 다루기 때문에 동적 할당하여 사용되는 메모리의 크기는 상당히 큰 편이며, 그렇기 때문에 비트맵 생성과 소멸은 매우 신중하게 코드를 만들어서 메모리 릭memory leak 같은 문제점이 발생하지 않도록 해야 한다.

일단 IppDib 클래스의 생성자와 소멸자를 살펴보자.

• IppDib();                  // (1)
• IppDib(const IppDib& dib); // (2)
• ~IppDib();                 // (3)

(1)번의 IppDib 클래스의 기본 생성자는 모든 멤버 변수를 0 또는 NULL로 초기화하고, 실제적인 DIB 구조를 할당하지는 않는다. 실제로 메모리를 할당하여 DIB 구조를 생성하는 작업은 조금 뒤에 설명할 CreateGrayBitmapCreateRgbBitmap 멤버 함수가 담당할 것이다. (2)번의 복사 생성자는 인자로 넘어오는 비트맵을 그대로 복사하여 새로운 IppDib 객체를 생성한다. (3)번의 소멸자에서는 동적 할당된 메모리가 있으면 해제하는 코드가 들어 있다. IppDib 클래스의 생성자와 소멸자 구현 코드는 소스 4-2를 참고하라.

소스 4-2 IppDib 클래스 - 생성자와 소멸자(IppDib.cpp)
IppDib::IppDib()
    : m_nWidth(0), m_nHeight(0), m_nBitCount(0), m_nDibSize(0), m_pDib(NULL)
{
}
IppDib::IppDib(const IppDib& dib)
    : m_nWidth(dib.m_nWidth), m_nHeight(dib.m_nHeight), m_nBitCount(dib.m_nBitCount),
    m_nDibSize(dib.m_nDibSize), m_pDib(NULL)
{
    if (dib.m_pDib != NULL)
    {
        m_pDib = new BYTE[m_nDibSize];
        memcpy(m_pDib, dib.m_pDib, m_nDibSize);
    }
}

IppDib::~IppDib()
{
    if (m_pDib)
        delete[] m_pDib;
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.