자기대입이 왜 위험한가? 같은 객체를 가리키는 참조자 두개(A 와 B)가 A = B 라고 해 놓고 delete B 라고 했을 때, A가 가르킨 객체는 이미 전기적 신호를 받고 날라간 상태이다. 그렇기 때문에, 같은 타입으로 만들어진 객체 여러 개를 참조자 혹은 포인터로 물어 놓고 동작하는 코드를 작성할 때는 같은 객체가 사용될 가능성을 고려하는 것이 일반적으로 바람직한 자세이다. 어떻게 이 위험으로부터 보호하겠는가? 참조자의 경우, 주소가 같기 때문에, 같은 주소인지 if문으로 비교하여, 같다면 하는일 없이 리턴을 하지만, 자기 대입이 일어날 경우는 적기 때문에, 모든 객체에 대해서 조사하는것은 효율이 낮다. 그렇기 때문에 우선 매개체를 복사한 후에, 복사된 매개체와 내자신과 바꾸는 방법을 많이 사용한다..
항목11 검색 결과
해당 글 2건
항목 11: operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자
책 정리/Effective C++ 3판
2008. 6. 1. 19:05
항목 11. 동적으로 할당되는 메모리를 갖는 클래스를 위해서는 복사 생성자와 치환 연산자를 선언하라
항목 11. 동적으로 할당되는 메모리를 갖는 클래스를 위해서는 복사 생성자와 치환 연산자를 선언하라 이유 1. 복사된 대상의 포인터의 값을 복사하기 때문이다. 해설 복사된 대상의 포인터 값만을 복사해서도 사용 가능하지만, 해체시 오류가 발생될수 있으므로 복사 생성자와 치환연산자를 깊은 복사로 하라는것 이다. 2008/06/02 14:00 수정 하라는것이 아닌, 작동 상태에 대해서 어떻게(얕은복사 깊은복사 등) 고려해 보라는 뜻 해결 방법 1. reference counting 을 사용하여, 0일경우 지우는 방법 - 객체를 복사할때 와 지울때마다 카운팅 하여, 0이 되면 삭제하는 방법이다. 2. 깊은복사를 위하여 복사생성자와 치환연산자를 변경하라 3. 복사 생성자와 치환연산자를 private: 에 묶어 버..
책 정리/Effective C++ 2판
2008. 5. 7. 17:05
최근댓글