일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 루아
- resource management class
- 영화 리뷰
- 다형성
- 게임
- lua
- 함수 객체
- reference
- 언리얼
- c++
- 암시적 변환
- 참조자
- virtual function
- 예외
- Effective c++
- 스마트 포인터
- implicit conversion
- effective stl
- exception
- 반복자
- operator new
- 오블완
- 상속
- UE4
- 영화
- Smart Pointer
- 티스토리챌린지
- more effective c++
- 메타테이블
- 비교 함수 객체
- Today
- Total
목록2024/10 (9)
스토리텔링 개발자
항목 3. 복사(Copy)는 컨테이너 안의 객체에 맞게 비용을 최소화하며, 동작은 정확하게 하자 컨테이너의 요소기본적으로 STL 컨테이너는 삽입, 삭제 시 복사 처리를 한다.컨테이너가 가진 객체는 넣을 당시의 것과 같은 것이 아니다.컨테이너에서 객체를 가져와도, 컨테이너에 있었던 것이 아니다.컨테이너 내부의 객체조차도 늘 같은 것이라 보장할 수 없다.vector 등에 insert를 통해 데이터를 삽입하거나, erase로 지우거나 하는 경우.컨테이너의 객체들은 복사를 통해 밀려나고 밀려온다.(항목 5, 항목 14 참조)정렬 알고리즘이나 그와 비슷한 매커니즘의 함수를 호출하는 경우.next_permutation, previous_permutation, remove, unique / rotate, reve..
항목 2. "컨테이너에 독립적인(container-independent) 코드"라는 환상을 조심하자 과한 일반화(generalization)의 적용코드 작성 시 일반화를 고려하게 될텐데, 이를 과하게 적용시키려 하는 것은 문제이다.컨테이너에 독립적인(container-independent) 코드를 작성하려는 욕심.모든 컨테이너에 대해 사용할 수 있도록 코드를 만든다.예컨대 vector를 사용하는 부분을 만들면서 언제든지 deque나 list를 쓸 수 있는 여지를 남긴다던가. 시퀀스 컨테이너와 연관 컨테이너를 일반화한다?대다수의 멤버 함수들은 한쪽 컨테이너에만 치우쳐 들어있다.push_back, push_front 등 : 시퀀스 컨테이너에서만 지원count, lower_bound 등 : 연관 컨테이..
항목 1. 적재적소에 알맞은 컨테이너를 사용하자 컨테이너의 종류표준 STL 시퀀스(sequence) 컨테이너vector, string, deque, list표준 STL 연관(associative) 컨테이너set, multiset, map, multimap비표준 시퀀스 컨테이너 (항목 50 참조)slist(단일 연결 리스트), rope(대용량 string)비표준 연관 컨테이너 (항목 25 참조)hash_set, hash_multiset, hash_map다만 모던 C++에서는 unordered_set, unordered_map 등을 표준으로 지원함.string 대신 사용되는 vector (항목 13 참조)간혹 이렇게 쓰면 괜찮을 때가 있다.표준 연관 컨테이너 대신 사용되는 vector (항목 23 참조)..
항목 35. C++ 언어의 최신 표준안과 표준 라이브러리에 대해 익숙해지자. 레거시 C++(C++98/03) 라이브러리 범주표준 C 라이브러리를 그대로 지원문자열(string) 지원지역화(localization) 지원입출력 스트림 라이브러리 변경숫자 조작을 돕는 데이터 타입 지원복소수(complex)숫자 데이터 배열 클래스(valarray)숫자 조작 함수(부분합(partial sum), 인접차(adjacent difference) 구하기)STL(표준 템플릿 라이브러리(Standard Template Library)) 지원타입에 상관 없이 쓸 수 있는 일반 용도의 컨테이너와 알고리즘 표준 C++ 라이브러리의 두 가지 특징표준 라이브러리에 속해 있는 대부분의 것들은 템플릿으로 만들어져 있다.std::..
항목 34. 한 프로그램에서 C++와 C를 함께 사용하는 방법을 이해하자. 네임 맹글링(Name Mangling)C++ 컴파일러가 내부 호출용 이름을 만들어 함수마다 붙이는 동작.이 동작은 C에서는 발생하지 않는다.C에서는 함수 오버로딩이 발생하지 않기 때문이다.즉, 이름이 같은 함수란 존재하지 않는다.하지만 C++에서는 이름이 같은 함수를 부지기수로 볼 수 있다.사실, 오버로딩된 함수는 링커를 통과할 수 없다.같은 이름의 여러 함수를 구분할 수 없기 때문이다.그렇기 때문에 네임 맹글링을 사용한다.C로 제작한 라이브러리 함수를 C++에서 사용한다면?아래와 같은 C 라이브러리가 있다면..void drawLine(int x1, int y1, int x2, int y2);// C++ 컴파일러가 네임 맹글링..
항목 33. 상속 관계의 말단에 있지 않은(non-leaf) 클래스는 반드시 추상 클래스로 만들자 대입 문제class Animal{public: Animal& operator=(const Animal& rhs); ...};class Lizard : public Aanimal{public: Lizard& operator=(const Lizard& rhs); ...};class Chicken : public Animal{public: Chicken& operator=(const Chicken& rhs); ...};Lizard liz1;Lizard liz2;Animal* pAnimal1 = &liz1;Animal* pAnimal2 = &liz2;...*pAnimal1 = *..
항목 32. 미래 지향적인 프로그래머가 되자 미래 지향적인 프로그래밍사용하고 있는 라이브러리에 함수가 새로 추가될 수 있으며오버로딩도 추가로 이루어질 수 있다는 사실을 인식하고,이 사실로 인해 모호한 함수 호출이 있을 수 있다는 점을 조심하자.기존의 클래스 계통 구조에 새 클래스가 추가될 수 있고,오늘의 파생 클래스가 내일의 기본 클래스가 될 수 있다는 사실을 인식하고 대비하자.새로운 애플리케이션이 만들어질 수 있고,특정 함수의 호출환경이 달라질 수 있다는 사실을 기억하고,이런 함수가 어느 경우에서든 제대로 동작하도록 만들자.소프트웨어 유지 보수를 만든 사람이 맡지 않는 경우가 다반사이므로,다른 사람이 이해하고, 수정하고, 개선하는 데 큰 문제를 일으키지 않는 방법으로 설계하자. 주석이나 문서화 ..
항목 31. 함수를 두 개 이상의 객체(타입)에 대해 가상 함수처럼 동작하도록 만들기 우주선, 정거장, 소행성 의 충돌 구현class GameObject { ... };// 아래의 각 타입은 충돌 타입에 따라 충돌 시 다른 동작을 한다.class SpaceShip : public GameObject { ... };class SpaceStation : public GameObject { ... };class Asteroid : public GameObject { ... };void checkForCollision(GameObject& object1, GameObject& object2){ if(theyJustCollided(object1, object2)) { // 아래 함수의 ..