4.2.6 기타 유용한 기능(연산자 재정의, 비트맵 정보 제공 등)
IppDib 클래스는 대입 연산자 재정의를 제공한다.
• IppDib& operator=(const IppDib& dib);
IppDib 클래스처럼 내부적으로 메모리를 동적 할당하여 사용하는 클래스는 대입 연산자를 재정의하여 사용하는 것이 안전하다. 대입 연산자를 재정의한 경우, 다음과 같은 코드를 이용하여 DIB를 복사할 수 있다.
IppDib dib1, dib2; dib1.Load("c:\\test.bmp"); dib2 = dib1; // 대입 연산자 재정의를 이용한 영상의 복사
대입 연산자 재정의 구현은 소스 4-7에 나타내었다. 대입 연산자 함수에서는 가장 먼저 재귀 검사를 통해 자기 자신에게 대입할 때 발생할 수 있는 문제점을 방지하고, 이후 모든 멤버 변수의 값을 복사한다. 특히 동적 할당된 메모리 공간의 내용도 동일하게 복사해주어야 한다.
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; }