항목 15. operator= 이 *this에 대한 레퍼런스(reference)를 리턴(return)하도록 한다.
이유
1. 연속적인 치환을 할 수 없게 된다.
2. 클래스를 사용하는 코드에서의 묵시적인 타입 변환도 할수 없게 된다.
3. const 레퍼런스로 받은 객체를를 &로 넘겨주지 못하게 된다.
4. 1,2,3 통틀어 객체도 기본자료형과 동일한 취급을 위해서다.
예) a = b = c = z = 1; 을 연산할수 있다!
해결 방법
1. 객체의 대입연산시 operator=을 수정하게 된다면 *this로 반환하게 만든다.
주의 사항
1. 혹시 기교를 위하여 다른값으로 넘겨주길 원하는 순간부터가 주의 사항이다!
개인적인 생각, 이래나 저래나 operator= 은 left.operator=(right)으로 작동된다는 점을 기억하면 this로 해야 한다는것은 쉽게 알수 있을것이다
이유
1. 연속적인 치환을 할 수 없게 된다.
2. 클래스를 사용하는 코드에서의 묵시적인 타입 변환도 할수 없게 된다.
3. const 레퍼런스로 받은 객체를를 &로 넘겨주지 못하게 된다.
4. 1,2,3 통틀어 객체도 기본자료형과 동일한 취급을 위해서다.
예) a = b = c = z = 1; 을 연산할수 있다!
해결 방법
1. 객체의 대입연산시 operator=을 수정하게 된다면 *this로 반환하게 만든다.
주의 사항
1. 혹시 기교를 위하여 다른값으로 넘겨주길 원하는 순간부터가 주의 사항이다!
개인적인 생각, 이래나 저래나 operator= 은 left.operator=(right)으로 작동된다는 점을 기억하면 this로 해야 한다는것은 쉽게 알수 있을것이다
'책 정리 > Effective C++ 2판' 카테고리의 다른 글
항목 19. 멤버 함수, 비멤버 함수 및 프렌드를 구별한다. (0) | 2008.05.09 |
---|---|
항목 18. 최소한의 완전한 클래스 인터페이스를 구축한다. (0) | 2008.05.09 |
3부, 클래스와 함수 : 설계 및 선언 (0) | 2008.05.08 |
항목 17. operator=에서 재귀치환을 검사한다. (0) | 2008.05.08 |
항목 16. operator=에서 모든 데이터 멤버들로의 치환을 수행한다. (0) | 2008.05.08 |
항목 14. 베이스 클래스에서 소멸자는 가상 함수로 선언해야 한다. (0) | 2008.05.08 |
항목 13. 클래스에 선언된 순서에 따라 멤버 초기화 리스트에 멤버들을 나열한다. (0) | 2008.05.07 |
항목 12. 생성자에서 치환보다는 초기화를 사용한다. (0) | 2008.05.07 |
항목 11. 동적으로 할당되는 메모리를 갖는 클래스를 위해서는 복사 생성자와 치환 연산자를 선언하라 (0) | 2008.05.07 |
2부까지 종료 (0) | 2008.05.07 |
최근댓글