본문 바로가기

대입연산자2

[Effective C++] 항목 11 : operator= 에서는 자기대입에 대한 처리가 빠지지 않도록 하자. 오늘부터는 가독성을 위해 제일 처음에 요약부분을 넣도록 하겠다. 요약 operator=을 구현할 때, 어떤 객체가 그 자신에 대입되는 경우를 제대로 처리하도록 만들자. 원본 객체와 복사대상 객체의 주소를 비교해도 되고, 문장의 순서를 적절히 조정할 수도 있으며, 복사 후 맞바꾸기 기법을 써도 된다. 같은 맥락으로 두 개 이상의 객체에 대해 동작하는 함수가 있다면, 이 함수에 넘겨지는 객체들이 같은 객체인 경우에 정확하게 동작하는지 확인해 보자. 자기 대입이란? 어떤 객체가 자기 자신에 대해 대입 연산자를 적용하는 것을 말한다. 오늘은 자기대입의 경우 발생할 수 있는 예외처리에 대해 알아본다. Widget& Widget::operator=(const Widget& rhs) { delete pb; pb = .. 2019. 7. 25.
[Effective C++] 항목 10 : 대입 연산자는 *this의 참조자를 반환하게 하자 오늘은 쉬어가는 타임으로 비교적 간단한 주제를 다루려고 한다. 알다싶히 C++의 대입 연산은 여러 개가 사슬처럼 엮일 수 있는 재미있는 성질을 갖고 있다. x = y = z = 15; 위의 코드는 아래와 같이 우측 연관 연산이라는 사슬로 이어진다. x = (y = (z = 15)); 위와 같은 결과가 나오려면 대입 연산자가 좌변 인자에 대한 참조자를 반환하도록 구현되어있다는 의미이다. class Widget { public: Widget& operator= (const Widget& rhs) { return *this; } }; 위의 class가 = 가 아닌 +=,-=,*= 등 매개변수 타입이 일반적이지 않은 경우에도 동일한 규칙이 적용된다. 오늘은 이것으로 끄웃~ㅎㅎ 2019. 7. 24.