항목 27. 의도하지 않은 내부 생성 맴버 함수의 이용을 명시적으로 막는다.
여기서 내부 생성 멤버 함수란?
1. 생성자
2. 소멸자
3. operator=
이유
1. 메모리 릭발생 위험이 있다. (반대로 메모리 릭의 반대 경우가 생길수도 있다. 없는 메모리를 delete)
2. 기본자료형과 같은 연산을 할수 없게 된다. 2008/05/31 14:19 수정
2. 제목 그대로, 의도하지 않은 동자을 일으킬수 있다.
해결방법
1. 재정의 해 준다.
2. 이용자체를 막는다.
덧붙여 해결방법 2의 예
1. operator =와 기본 private로 선언한다. 2008/05/31 14:19 수정
1. 복사생성자와 operator= 를 재정의해주거나, private로 옮겨 정상작동하거나 동작자체를 막는다
2. 함수의 작업을 ; 로 끝낸다.
(이것으로 외부에서 =은 컴파일러가 막아 주고, 멤버함수에서 호출하거나 friend로 호출할때는 링커가 막아준다.)
개인적 생각
1. 해결방법 2로 private으로 넣는 방법은 정말 탁월하다.
2. 전역객체로 선언한 객체 역시 private 에 데이터를 모아두면, 일반적 전역변수 디버깅이 쉽다!
3. 해결방법 2의 방법중 링커가.. 오류를 찾게 되면 디버깅이 힘들어 진다. 설계 당시.. 잘해야 한다.
깊에 들어가려면 역시 설계를 잘해야 할것같다.
여기서 내부 생성 멤버 함수란?
1. 생성자
2. 소멸자
3. operator=
이유
1. 메모리 릭발생 위험이 있다. (반대로 메모리 릭의 반대 경우가 생길수도 있다. 없는 메모리를 delete)
2. 기본자료형과 같은 연산을 할수 없게 된다. 2008/05/31 14:19 수정
2. 제목 그대로, 의도하지 않은 동자을 일으킬수 있다.
해결방법
1. 재정의 해 준다.
2. 이용자체를 막는다.
덧붙여 해결방법 2의 예
1. operator =와 기본 private로 선언한다. 2008/05/31 14:19 수정
1. 복사생성자와 operator= 를 재정의해주거나, private로 옮겨 정상작동하거나 동작자체를 막는다
2. 함수의 작업을 ; 로 끝낸다.
(이것으로 외부에서 =은 컴파일러가 막아 주고, 멤버함수에서 호출하거나 friend로 호출할때는 링커가 막아준다.)
개인적 생각
1. 해결방법 2로 private으로 넣는 방법은 정말 탁월하다.
2. 전역객체로 선언한 객체 역시 private 에 데이터를 모아두면, 일반적 전역변수 디버깅이 쉽다!
3. 해결방법 2의 방법중 링커가.. 오류를 찾게 되면 디버깅이 힘들어 진다. 설계 당시.. 잘해야 한다.
깊에 들어가려면 역시 설계를 잘해야 할것같다.
'책 정리 > Effective C++ 2판' 카테고리의 다른 글
항목 31. 지역 객체에 대한 참조나 함수 내에서 new를 이용해 초기화된 포인터를 가리키는 참조를 리턴하지 말라 (0) | 2008.05.10 |
---|---|
항목 30. 접근하기 어려운 멤버에 대한 비상수 포인터나 레퍼런스를 리턴하는 멤버 함수 사용을 피해라 (0) | 2008.05.10 |
항목 29. 내부 데이터에 대한 "핸들"을 리턴하는 것을 피해라 (0) | 2008.05.10 |
클래스와 함수 : 구현 (0) | 2008.05.10 |
항목 28. 전역 네임스페이스를 분활한다. (0) | 2008.05.10 |
항목 26. 잠재적 모호성을 경계한다. (0) | 2008.05.10 |
항목 25. 포인터나 수치형 타입상의 오버로딩을 피한다. (0) | 2008.05.10 |
항목 24. 함수 오버로딩과 디폴트 인자값 중에서 주의깊게 선택한다. (0) | 2008.05.10 |
항목 23. 객체 반환시 레퍼런스를 반환하지 않는다. (0) | 2008.05.10 |
항목 22. 값에 의한 호출보다는 레퍼런스에 의한 호출을 선호한다. (0) | 2008.05.10 |
최근댓글