일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 참조자
- 예외
- 메타테이블
- Vector
- 티스토리챌린지
- exception
- effective stl
- 비교 함수 객체
- 다형성
- 암시적 변환
- 영화
- 상속
- 언리얼
- c++
- 반복자
- 스마트 포인터
- resource management class
- virtual function
- operator new
- reference
- 게임
- 루아
- more effective c++
- Effective c++
- Smart Pointer
- implicit conversion
- UE4
- 오블완
- 영화 리뷰
- lua
Archives
- Today
- Total
스토리텔링 개발자
[Effective C++] 6. 암시적으로 생성되는 함수 금지하기 본문
728x90
항목 6. 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해버리자.
암시적 생성 함수의 문제
- 컴파일러가 생성하는 함수는 모두 public 멤버가 된다.
- 이처럼 의도하지 않은 인터페이스 노출은 실수를 유발할 수 있다.
private 멤버로 명시적 선언만 하여 해결
- private 멤버로만 처리했을 때의 문제점
- 해당 클래스의 멤버 함수 및 프랜드(friend) 함수 내에서 private 멤버를 호출할 여지가 있다.
- 정의를 하지 않음으로써 호출 시 링크 시점에 에러가 뜨게 한다.
링크 시점 에러를 컴파일 시점 에러로 옮기는 방법
- 에러 탐지는 나중으로 미루는 것보다 미리하는 것이 좋기 때문.
- 복사 생성자, 복사 대입 연산자를 private로 선언한 부모 클래스를 상속한다.
- 컴파일러가 생성한 복사 함수는 기본 클래스의 대응 버전을 호출하게 되어 있다.
복사 생성자, 복사 대입 연산자를 금하는 기본 클래스(Uncopyable)의 기술적 이슈
- 이 클래스를 상속할 때는 public일 필요가 없다.(항목 32, 39)
- 이 경우 소멸자는 가상 소멸자가 아니어도 된다.(항목 7)
- 데이터 멤버가 전혀 없으므로 공백 기본 클래스 최적화 기법이 먹힐 수 있다.(항목 39)
- 그러나 기본 클래스이므로 해당 기법 적용시 다중 상속 문제가 발생할 가능성이 있다.(항목 40)
- 다중 상속시 공백 기본 클래스 최적화가 통하지 않을 때가 종종 있다.(항목 30)
- 부스트 라이브러리(항목 55)에 같은 구실의 클래스(noncopyable)가 있다.
728x90
'개발 > Effective C++' 카테고리의 다른 글
[Effective C++] 8. 소멸자 호출 중 예외 문제 (0) | 2024.05.22 |
---|---|
[Effective C++] 7. 다형성 부모 클래스라면 가상 소멸자 선언 (0) | 2024.05.21 |
[Effective C++] 5. 암시적으로 생성되는 함수 (0) | 2024.05.17 |
[Effective C++] 4. 객체 초기화 문제 (0) | 2024.05.16 |
[Effective C++] 3. const 선호하기 (0) | 2024.05.14 |
Comments