| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- effectivec++.
- 멤버함수템플릿
- 템플릿
- 부분복사
- 가상기본클래스
- Directx9
- c++
- EffectiveC++
- 상수객체참조
- uniqueptr
- private상속
- 암시적인터페이스
- rcsp
- fvf
- 제네릭프로그래밍
- 게임프로그래밍
- 해골책
- 이른진단
- 도우미함수
- most vexing parse
- 크래프톤 정글 게임테크랩
- RAII
- 일반화복사생성자
- 스택풀림
- contextswitching
- 게임 테크랩 2기
- operator=
- sharedptr
- 교차dll문제
- 암시적변환
- Today
- Total
목록EffectiveC++ (40)
성공할 게임개발자
컴파일러가 제공해주는 훌륭한 operator new와 operator delete를 바꾸려는 이유가 무엇일까? 1. 잘못된 힙 사용을 탐지하기 위해데이터 오버런(할당된 메모리 블록의 끝을 넘어 뒤에 기록하는 것) 데이터 언더런(할당된 메모리 블록의 시작을 넘어 앞에 기록하는 것)이 발생할 수 있다. 이런 경우에 대비하여 사용자 정의 operator new를 활용하면 요구된 크기보다 약간 더 메모리를 할당한 후에 사용자가 실제로 사용할 메모리의 앞과 뒤에 오버런/언더런 탐지용 바이트 패턴(경계표지)을 적어두도록 만들 수 있을 것이다.만약 경계표지부분에 원래와 다른 정보가 있다면 메모리 블록을 사용하는 도중에 오버런이나 언더런이 발생한 것이므로 operator delete는 이 사실을 로그로 기록함으로써 문..
new 처리자(new-handler 할당에러 처리자)메모리 할당 요청을 operator new함수가 맞추어 주지 못할 경우 사용자 쪽에서 지정할 수 있는 에러 처리 함수를 우선적으로 호출하도록 하는 함수namespace std{ typedef void(*new_handler)(); new_handler set_new_handler(new_handler p) throw();} typedef void(*new_handler)() 의 의미 new_handler는 인자없고 void 반환형인 함수 포인터 타입의 별명즉, void 반환, 인자 없음 형태의 함수 포인터 타입을 new_handler 라는 이름으로 정의한다의 뜻 위에서 set_new_handler는 new_handler를 받고 ne..
템플릿 메타 프로그래밍(TMP)은 컴파일 도중에 실행되는 템플릿 기반의 프로그램을 작성하는 일을 말한다.TMP의 강점 두가지1. TMP를 쓰면 다른 방법으로는 까다롭거나 불가능한 일을 굉장히 쉽게 할 수 있다2. TMP는 C++컴파일이 진행되는 동안에 실행되기 때문에, 기존 작업을 런타임영역에서 컴파일 타임 영역으로 전환할 수 있다2의 이득 : 일반적으로 프로그램 실행 도중에 잡혀 왔던 몇몇 에러들을 컴파일 도중에 찾을 수 있다2의 이득 : TMP를 써서 만든 C++프로그램이 확실히 모든 면에서 효율적일 여지가 많다컴파일 타임에 동작을 다 해 가지고 오기 때문에 실행 코드가 작아지고 실행 시간도 짧아지며 메모리도 적게 잡아먹는다. 항목 47 의 advance 코드templatevoid advance(It..
STL 반복자는 지원하는 연산에 따라 5개의 범주로 나뉜다. 입력반복자읽기전용단방향 전진만 가능std::istream_iterator it(std::cin);int x = *it; // 읽기 가능 출력반복자쓰기전용단방향 전진만 가능std::ostream_iterator out(std::cout, " ");*out = 10; // 쓰기 가능 순방향 반복자읽기, 쓰기 가능여러번 읽기 가능단방향 전진std::istream_iterator it(std::cin);int x = *it; // 읽기 가능 양방향 반복자순방향에서 뒤로 갈 수 있는 기능 추가한 것대표 컨테이너 : set, multiset, map, multimap, liststd::list::iterator it;++it; --it; 임의..
템플릿 인자 추론 과정 ( template argument deduction )에서는 암시적 타입변환이 코려되지 않는다 항목 24에 따라 모든 매개변수에 대해 암시적 타입 변환이 되도록 만들기 위해서는 비멤버 함수밖에 방법이 없다. 문제상황templateclass Rational{public: Rational(const T& numerator = 0, const T& denominator = 1); const T numerator() const; const T denominator() const; ...};templateconst Rational operator* (const Rational& lhs, const Rational& rhs){ ... }Rational..
스마트 포인터로 대신할 수 없는 포인터의 특징 암시적 변환(implicit conversion)지원파생클래스 포인터는 암시적으로 기본 클래스 포인터로 변환되고.. 비상수 객체에 대한 포인터는 상수 객체에 대한 포인터로 암시적 변환이 가능하고... 예시calss Top { ... };class Middle : public Top { ... };class Bottom : public Middle { ... };Top* pt1 = new Middle; // Middle* >> Top*의 암시적 변환Top* pt2 = ndw Bottom; // Bottom* >> Top*의 암시적 변환const Top* pct2 = pt1; // Top* >> const Top*의 암시적 변환이런 식의 타입 변환을..