일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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++
- 티스토리챌린지
- 영화 리뷰
- Smart Pointer
- UE4
- reference
- virtual function
- 참조자
- 상속
- effective stl
- 예외
- 다형성
- 스마트 포인터
- Vector
- implicit conversion
- 루아
- exception
- 언리얼
- c++
- resource management class
- operator new
- Effective c++
- lua
- 오블완
- 게임
- 암시적 변환
- 비교 함수 객체
- 영화
- 메타테이블
- 반복자
- Today
- Total
목록티스토리챌린지 (13)
스토리텔링 개발자
항목 10. 할당자(allocator)의 일반적인 사항과 제약 사항에 대해 잘 알아두자 할당자의 기원16비트 운영체제(DOS) 시절, 라이브러리 제작자들이 near, far 포인터 구분에 힘을 덜 쓸 수 있도록메모리 모델의 추상층으로 개발된 것이다.그처럼 STL 할당자 역시 객체 메모리 관리를 편하게 하기 위해 설계되었다. STL 할당자의 문제몇몇 부분에서 효율성 저하가 판명되었다.사실상 operator new, operator new[]와 동일한 기능이지만, 인터페이스는 전혀 비슷하지 않다.심지어 malloc과도 비슷하지 않다. 할당자의 제약 사항 1. pointer / reference 타입할당자는 자신에게 정의된 메모리 모델의 포인터와 참조자에 대한 typedef 타입을 제공한다.(모던에..
항목 9. 데이터를 삭제할 때에도 조심스럽게 선택할 것이 많다 특정 요소 삭제하기컨테이너의 요소 중 1963이라는 값을 모두 삭제하고 싶다면?컨테이너 종류에 따라 삭제 방법이 다르다.연속 메모리(시퀀스) 컨테이너(vector, deque, string)erase-remove 합성문// erase-remove 합성문// remove : 제거한 요소들을 컨테이너 뒤로 이동시킨다.// 마지막 유효한 값 다음 반복자를 리턴한다.// 컨테이너의 크기는 변하지 않는다.// erase : 반복자 및 반복자의 범위를 컨테이너에서 제거한다.// 삭제된 요소 다음 반복자를 리턴한다.// 컨테이너의 크기가 변한다.c.erase(remove(c.begin(), ..
항목 8. auto_ptr의 컨테이너는 절대로 만들지 말자 COAP(Container Of Auto Ptr) 금지사실 컴파일러가 통과도 시켜주지 않아야 정상이다.게다가 요새는 auto_ptr조차 표준이 아니다.하지만 이 책이 쓰여질 시기에는 이를 허용하는 컴파일러가 있었고, 그것이 문제였다. COAP 금지 이유이식이 불가능하다.표준은 auto_ptr을 컨테이너에 담지 못한다, 이기 때문이다.auto_ptr의 복사 동작이 문제된다. auto_ptr의 복사 동작복사하면, 소유권이 옮겨지고, 기존의 것은 null로 셋팅된다.즉, auto_ptr을 복사하는 것은 '그 포인터의 값을 바꾸는 것이다'라고 할 수 있다.auto_ptr pw1(new Widget); // pw1 = 위젯의 포인터auto_pt..
항목 7. new로 생성한 포인터의 컨테이너를 사용할 때에는 컨테이너가 소멸되기 전에 포인터를 delete하는 일을 잊지 말자 컨테이너의 메모리 해제보통의 경우 컨테이너는 요소의 메모리 해제를 잘 해 주지만..new로 할당된 객체 포인터의 경우 이야기가 다르다.void doSomething(){ vector vwp; for(int i = 0 ; i vwp의 각 요소, 포인터 자체는 소멸되지만, 포인터가 가리키는 공간은 전혀 해제되지 않는다.즉, 아래와 같이 해주어야 한다.void doSomething(){ vector vwp; ... // 예전과 동일 // 해제 처리를 해주어야 한다. for(vector::iterator i = vwp.begin(); i != ..
항목 6. C++ 컴파일러의 어이없는 분석 결과를 조심하자 파일에 들어있는 int의 list를 복사하려는 예시ifstream dataFile("ints.dat");// 잘못 짜여진 코드list data(istream_iterator(dataFile), istream_iterator());컴파일은 잘 된다. 하지만, 런타임에 아무 일도 하지 않는다.파일에서 데이터를 전혀 읽지 않으며,심지어 리스트조차 만들지도 않는다.사실 위의 코드는 list 객체를 선언하지도 않았고, 생성자를 호출하지도 않았다! 함수 선언문// 아래는 모두 함수 선언문이다.int f(double d);int f(double (d)); // d를 둘러싼 괄호는 무시int f(double); // 매개변수 이..