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;
    }
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.