일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- more effective c++
- 비교 함수 객체
- virtual function
- Smart Pointer
- 게임
- reference
- 상속
- 참조자
- effective stl
- 영화
- 암시적 변환
- implicit conversion
- 루아
- 메타테이블
- resource management class
- operator new
- exception
- 영화 리뷰
- 다형성
- Vector
- 오블완
- 티스토리챌린지
- c++
- 언리얼
- Effective c++
- lua
- UE4
- 예외
- 반복자
- 스마트 포인터
- Today
- Total
목록Effective c++ (54)
스토리텔링 개발자
항목 6 : 증가 및 감소 연산자의 전위 / 후위 형태를 반드시 구분하자 ++, -- 연산자 오버로드 규칙의 필요성80년대 후반에는 전위, 후위 방식으로 호출하는 것을 구분할 방법이 없었다.그래서 해당 연산자의 전위 / 후위 형태를 오버로딩 할 수 있도록 스팩이 향상되었다.근데 오버로딩은 보통 매개변수의 타입에 따라 구분되는데?증감 연산자는 인자를 전혀 받지 않는다는 문제가 있다.그래서 아래의 규칙이 생겨났다. 증감 연산자의 오버로딩 규칙후위 형태는 int 타입의 인자를 받는다.증감 연산자가 후위로 호출될 때 컴파일러는 해당 인자로 0을 넘겨준다.전, 후위 형태는 서로 다른 타입을 반환한다.전위 형태참조자 타입을 리턴후위 형태const 객체 타입을 리턴class UPInt{public: UP..
항목 55 : Boo자유친! 부스트를 늘 여러분 가까이에. 부스트란?C++ 개발자들의 단체이자 무료 다운로드가 가능한 C++ 라이브러리 집합을 동시에 일컫는 고유명사이다.차별점부스트는 C++ 표준화 위원회와 밀접하고 영향력 있는 밀월관계가 있다.표준 C++에 추가될 수 있는 기능들의 시험장소라는 의미이다.라이브러리 승인 과정이 까다롭다. 라이브러리 승인 과정 (공개 동료 심사(public peer review))사전 심사(perliminary examination)부스트 최소 요구사항 만족 여부 확인컴파일 되는 컴파일러가 최소 두개 이상일 것.라이센스가 적절한지 여부공식 심사설계와 구현이 얼마나 우수한가다른 컴파일러와 운영체제들에 맞추어 이식할 수 있는 코드인가대상 사용자들(특정 분야 종사자들)에..
항목 54 : TR1을 포함한 표준 라이브러리 구성요소와 편안한 친구가 되자 C++ 차기 버전C++0x 라고 불렸지만, 실제로 반영되고 나서의 이름은 C++11.(모던 C++)TR1(C++ 라이브러리 작업 그룹이 작성한 "1차 기술 보고서(Technical Report 1)")의 대부분은 C++11에 포함되었다. 각 라이브러리 구성요소C++98 표준 C++ 라이브러리 주 구성요소표준 템플릿 라이브러리(STL)컨테이너, 반복자, 알고리즘, 함수 객체 등iostream사용자 정의 버퍼링국제화 기능 가능한 입출력cin, cout, cerr, clog 등의 사전 정의 객체국제화 지원여러 로케일 활성화 기능wchar_t 등의 타입(대개 16비트 문자) 및 wstring(wchar_t 타입으로 정의한 str..
항목 53 : 컴파일러 경고를 지나치지 말자 컴파일러 경고의 예시class B{public: virtual void f() const;};class D : public B{public: virtual void f(); // const가 아니라서 이름 가려짐};// 아마도 아래와 같은 경고가 나올 것이다.// warning: D::f() hides virtual B::f()경고는 f 함수가 재선언된 것이 아니라, 이름이 아예 가려진다는 사실을 알려주고 있다.(항목 33 참조)경고를 읽지 않고 지나치면 오버라이드 되지 않은 상황이 언젠가 버그가 되어 돌아올지도.. 결론어떤 경고 메시지를 없애기 전에, 그 경고의 의미를 정확히 파악하자.경고 메시지를 없애는 데 급급하다 보면 정말 수정해야 하..
항목 52 : 위치 지정 new를 작성한다면 위치 지정 delete도 같이 준비하자. new 중 기본 생성자에서 예외가 발생한다면?Widget* pw = new Widget;위 코드는 실행 중 두 개의 함수가 순차적으로 호출된다. (항목 16, 항목 17 참조)메모리 할당을 위한 operator new 호출Widget의 기본 생성자 호출만약 메모리 할당은 성공했으나, 기본 생성자에서 예외가 발생한다면?이미 할당된 메모리를 취소해야 한다.하지만 메모리에 대한 포인터가 pw에 할당되지 않고 예외가 발생했으므로, 사용자 코드에서는 메모리를 해제할 수 없다.그러므로 C++ 런타임 시스템이 이 역할을 맡아야 한다.이 상황에서 C++ 런타임 시스템이 하는 일은?호출한 operator new 함수와 짝이 되는 o..
항목 51. new 및 delete를 작성할 때 따라야 할 기존의 관례를 잘 알아두자 operator new 구현 시 요구사항반환값이 제대로 되어 있어야 한다.가용 메모리가 부족할 경우 new 처리자 함수를 호출해야 한다. (항목 49 참조)크기가 없는(0바이트) 메모리 요청에 대한 대비를 해야 한다.실수로 ‘기본(normal)’ 형태의 new가 가려지지 않도록 해야 한다. (항목 52 참조) 요구사항을 지키며 operator new 구현구현?요청된 메모리를 마련해 줄 수 있는 경우그 메모리에 대한 포인터를 반환한다.요청된 메모리를 마련해 줄 수 없는 경우bad_alloc 타입의 예외를 던지면 된다. (항목 49 참조)말로는 쉽지만 실제 구현은 꽤 까다롭다.. 문제점operator new는 메모리..
항목 50 : new 및 delete를 언제 바꿔야 좋은 소리를 들을지를 파악해두자 operator new / delete를 커스텀하는 이유잘못된 힙 사용 탐지를 위해new 한 메모리에 대해 delete를 잊으면 메모리 누수가 발생한다.new 한 메모리에 두번 이상 delete 하면 미정의 동작을 한다.할당된 메모리 주소의 목록을 operator new가 유지하고 delete에서 제거하게 만들면 실수를 방지할 수 있을 것이다.데이터 오버런(overrun, 할당된 메모리 블록 끝을 넘어 뒤에 기록), 데이터 언더런(underrun, 할당된 메모리 블록 시작을 넘어 앞에 기록)이 발생할 수 있다.메모리를 약간 더 할당해서 오버런 / 언더런 탐지용 바이트 패턴을 구현할 수 있다.효율을 향상시키기 위해컴파일..
항목 48. 템플릿 메타 프로그래밍, 하지 않겠는가? 템플릿 메타 프로그래밍(TMP)컴파일 도중에 실행되는 템플릿 기반의 프로그램을 작성하는 일을 말한다.템플릿 메타 프로그램은 C++ 컴파일러가 실행시키는, C++로 만들어진 프로그램이다. 템플릿 메타 프로그래밍(TMP)의 강점다른 방법으로는 까다롭거나 불가능한 일을 굉장히 쉽게 할 수 있다.C++ 컴파일이 진행되는 동안에 실행되기 때문에, 기존 작업을 런타임에서 컴파일 타임으로 전환할 수 있다.이를 통해 두 가지 이득을 취할 수 있는데,일반적으로 프로그램 실행 도중에야 잡을 수 있었던 에러들을 컴파일 타임에 찾아낼 수 있다.TMP를 써서 만든 C++ 프로그램이 효율적일 여지가 높다.컴파일 타임에 동작을 다 해가지고 오기 때문에 실행 코드가 작아지..