책 정리/Effective C++ 2판
항목 27. 의도하지 않은 내부 생성 맴버 함수의 이용을 명시적으로 막는다.
최익필
2008. 5. 10. 16:31
항목 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의 방법중 링커가.. 오류를 찾게 되면 디버깅이 힘들어 진다. 설계 당시.. 잘해야 한다.
깊에 들어가려면 역시 설계를 잘해야 할것같다.