더북(TheBook)

4.2.6 기타 유용한 기능(연산자 재정의, 비트맵 정보 제공 등)

IppDib 클래스는 대입 연산자 재정의를 제공한다.

IppDib& operator=(const IppDib& dib);

IppDib 클래스처럼 내부적으로 메모리를 동적 할당하여 사용하는 클래스는 대입 연산자를 재정의하여 사용하는 것이 안전하다. 대입 연산자를 재정의한 경우, 다음과 같은 코드를 이용하여 DIB를 복사할 수 있다.

IppDib dib1, dib2;
dib1.Load("c:\\test.bmp");
dib2 = dib1;    // 대입 연산자 재정의를 이용한 영상의 복사

대입 연산자 재정의 구현은 소스 4-7에 나타내었다. 대입 연산자 함수에서는 가장 먼저 재귀 검사를 통해 자기 자신에게 대입할 때 발생할 수 있는 문제점을 방지하고, 이후 모든 멤버 변수의 값을 복사한다. 특히 동적 할당된 메모리 공간의 내용도 동일하게 복사해주어야 한다.

소스 4-7 IppDib 클래스 - 대입 연산자 재정의와 비트맵 복사 (IppDib.cpp)
IppDib& IppDib::operator=(const IppDib& dib)
{
    if (this == &dib) // 재귀 검사
        return *this;

    if (m_pDib)
        delete[] m_pDib;

    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);
    }

    return *this;
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.