날마다 새롭게 또 날마다 새롭게

대입 연산자와 복사 생성자 오버로딩 (깊은 복사) 본문

프로그래밍/C / C++

대입 연산자와 복사 생성자 오버로딩 (깊은 복사)

아무유 2012. 10. 28. 19:52

 객체 간 대입연산 시 대입 연산자를 정의하지 않으면 디폴트 대입 연산자가 삽입된다. 디폴트 대입 연산자는 멤버 대 멤버의 복사가 얕은 복사로 진행 된다. 그렇기 때문에 연산자를 동적 할당하고 있는 객체를 디폴트 대입 연산자로 연산하게 되면 메모리 누수와 메모리 중복 해제하는 문제가 발생한다. 그러므로 문제가 발생하지 않도록 직접 대입 연산자를 정의하도록 한다.

 연산자를 동적 할당하는 경우 대입 연산자를 다음과 같은 형태로 정의한다.

■ 깊은 복사를 진행하도록 정의한다.

■ 메모리 누수가 발생하지 않도록, 깊은 복사에 앞서 메모리 해제의 과정을 거친다.



※ 상속 구조에서의 대입 연산자 호출

 유도 클래스의 생성자에는 아무런 명시를 하지 않아도 기초 클래스의 생성자가 호출되지만 유도 클래스의 대입 연산자에는 아무런 명시를 하지 않으면 기초 클래스의 대입 연산자가 호출되지 않는다. 다시 정리하면 유도 클래스의 디폴트 대입 연산자는 기초 클래스의 대입 연산자를 호출한다. 하지만 유도 클래스의 대입 연산자를 직접 정의하는 경우 기초 클래스의 대입 연산자 호출을 명시하지 않으면 기초 클래스 대입 연산자가 호출 되지 않는다.



Comments