자기대입(self assignment): 어떤 객체가 자기 자신에 대해 대입 연산자를 적용하는 것을 말함
*px = *py;
라는 구문의 경우 가리키는 대상이 같으면 자기 대입이 된다.(중복 참조)
자기 참조의 가능성이 높은 코드 예시
*문제 되는 상황
- operator= 내부에서 *this와 rhs가 같은 객체일 가능성이 있기 때문에 이를 검사해줄 필요가 있음.
*해결방법
1. 일치성 검사(identity test)
- 자기 대입을 스스로 검사하여 이를 해결하려고 함.
- 예외가 터지면 widget 객체는 결국 삭제된 bitmap 포인터를 가지고 남게 되어버림
- 해결 방법
2. 복사 후 맞바꾸기(copy and swap)
- swap 함수를 이용하여 pointer를 맞바꾸기로 하여 생성
- 문제되는 저은 전달되는 내용에 대한 사본이 생긴다는 것이다.
'More Programmings > Effective C++' 카테고리의 다른 글
항목 13. 자원 관리에는 객체가 그만! (0) | 2017.05.01 |
---|---|
항목 12: 객체의 모든 부분을 빠짐없이 복사하자 (0) | 2017.02.26 |
항목 10: 대입 연산자는 *this의 참조자를 반환하게 하자 (0) | 2017.02.26 |
항목 9: 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자 (0) | 2017.02.26 |
항목 8: 예외가 소멸자를 떠나지 못하도록 붙들어 놓자 (0) | 2017.02.19 |