일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 암시적 변환
- 스마트 포인터
- UE4
- 메타테이블
- lua
- 다형성
- 언리얼
- effective stl
- 오블완
- 영화
- implicit conversion
- c++
- 반복자
- more effective c++
- 비교 함수 객체
- Smart Pointer
- 참조자
- 영화 리뷰
- operator new
- Vector
- virtual function
- 티스토리챌린지
- 게임
- 상속
- resource management class
- reference
- exception
- 예외
- 루아
- Effective c++
- Today
- Total
목록Effective c++ (54)
스토리텔링 개발자
항목 6. 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해버리자. 암시적 생성 함수의 문제컴파일러가 생성하는 함수는 모두 public 멤버가 된다.이처럼 의도하지 않은 인터페이스 노출은 실수를 유발할 수 있다. private 멤버로 명시적 선언만 하여 해결private 멤버로만 처리했을 때의 문제점해당 클래스의 멤버 함수 및 프랜드(friend) 함수 내에서 private 멤버를 호출할 여지가 있다.정의를 하지 않음으로써 호출 시 링크 시점에 에러가 뜨게 한다. 링크 시점 에러를 컴파일 시점 에러로 옮기는 방법 에러 탐지는 나중으로 미루는 것보다 미리하는 것이 좋기 때문.복사 생성자, 복사 대입 연산자를 private로 선언한 부모 클래스를 상속한다.컴파일러가 생성한 복사 함수..
항목 5. C++가 은근슬쩍 만들어 호출해버리는 함수들에 촉각을 세우자. 암시적 생성 생성자, 복사 생성자, 복사 대입 연산자, 소멸자 직접 선언하지 않으면 컴파일러가 저절로 선언해준다.암시적 생성 되는 복사 관련 함수들은 얕은 복사를 한다. 암시적으로 생성된 함수들의 특징기본 생성, 소멸자기본 클래스 및 비정적 데이터 멤버의 생성자, 소멸자를 호출해주는 등의 작업을 한다.즉, 컴파일러에게 “배후의 코드”를 깔 수 있는 자리를 마련해준다.상속한 기본 클래스의 소멸자가 가상 소멸자가 아니라면 비가상 소멸자로 만들어진다.복사 생성자, 복사 대입 연산자원본 객체의 비정적 데이터를 사본 객체 쪽으로 그냥 복사한다.복사 생성자와 복사 대입 연산자는 근본적으로 동작 원리가 같다.복사 대입 연산자를 priva..
항목 4. 객체를 사용하기 전에 반드시 그 객체를 초기화하자 자동으로 하는 객체 초기화의 문제C++ 객체 초기화 규칙은 조금 복잡하다.그러므로 차라리 모든 객체를 사용하기 전에 초기화하는 것이 좋다. 초기화 시의 팁대입과 초기화를 헷갈리지 말자.대입 : 기본 생성자 호출 -> 복사 대입 연산자 호출초기화 리스트 사용 : 복사 생성자 호출 초기화란 생성자 본문이 실행되기 전에 되어야 하는 것이다.그러므로 멤버 초기화 리스트를 사용하자.클래스 멤버를 모두 초기화 리스트에 올리는 정책의 장점어떤 멤버가 초기화되지 않을 수 있다는 사실의 부담감이 없어진다.상수나 참조자 데이터 멤버는 대입이 불가능하다.즉, 반드시 초기화되어야 하므로 필수로 초기화 리스트에 넣어 주어야 한다. 객체를 구성하는 데이터의 ..
항목 3. 낌새만 보이면 const를 들이대보자 const소스코드 수준에서 외부 변경이 불가능하다는 의미적 제약을 붙이며, 컴파일러가 이 제약을 단단히 지켜준다.사용 범위전역 및 네임 스페이스 유효 범위 안에서 상수 선언(정의)시파일, 함수, 블록 유효 범위 내에서 static 객체 선언 시클래스 내 정적 / 비정적 데이터 멤버 선언 시포인터 자체 및 포인터가 가리키는 데이터 선언 시함수 선언 시함수 반환값을 상수로 하면 안전성과 효율에 더해 사용 시 에러도 감소한다.매개변수, 지역객체의 수정이 필요 없다면 const를 붙이자.상수 멤버 함수로 선언하는 것의 이점 : 상수 객체만 호출할 수 있는 함수임을 표기함으로써 용도를 확실히 한다. 상수 포인터 사용법* 을 기준으로 좌, 우에 붙는 const..
항목 2. #define을 쓰려거든 const, enum, inline을 떠올리자 선행 처리자(define)의 문제선행처리자는 컴파일러로 넘어가기 전에 숫자 상수로 대체된다.컴파일러 기호 테이블에 선행처리자 상수 이름은 들어가지 않는다.선행처리자의 이름으로 디버깅할 수 없다.선행처리자는 대부분 const로 대체 가능하므로 const로 대체하도록 하자. const 정의 시 주의할 점상수 포인터를 정의하는 경우, const를 붙여주는 위치를 주의해야 한다.포인터를 const로 할 것인가, 가리키는 대상을 const로 할 것인가에 따라 const 위치가 달라진다.차라리 둘 다 const를 붙여서 모호성을 제거해주는 게 나을 것이다. 클래스 멤버로 상수를 정의하는 경우static 멤버로 해주는 편이 좋..